网站首页 文章专栏 支付宝支付流程(H5支付);退款
以下是几年前写的,原生写法,现已改进,融合了微信和支付宝的各种支付方式,调用方便。详见:《常用微信和支付宝支付方法》
function alipayfromh5($orderNo, $money, $subject) {
$return_url = '同步回调地址';
$notify_url = '异步回调地址';
$arr = array(
'subject' => $subject,//描述性信息,用户可见
'out_trade_no' => $orderNo, //订单号
'total_amount' => $money, //支付金额
'product_code' => 'QUICK_WAP_WAY',
'notify_url' => $notify_url,
'return_url' => $return_url,
);
vendor('appalipay.AopSdk');
$aop = new \AopClient();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $app_id;//APP_Id
$aop->rsaPrivateKey = $ali_rsaPrivateKey;//支付宝开发者私钥
$aop->alipayrsaPublicKey =$ali_alipayrsaPublicKey;////支付宝公钥
$aop->apiVersion = '1.0';
$aop->postCharset = 'UTF-8';
$aop->format = 'json';
$aop->signType = 'RSA2';
$request = new \AlipayTradeWapPayRequest();
$request->setNotifyUrl($notify_url);
$request->setReturnUrl($return_url);
$request->setBizContent(json_encode($arr));
$result = $aop->pageExecute($request);
$this->siteLogsPay('支付宝H5支付处理结果:' . $orderNo . ':' . json_encode($result, JSON_UNESCAPED_UNICODE), date('Ymd', strtotime('now')), 'alipay');//最好记录日志
echo $result;
}
同步支付回调
function h5alireturn() {
$orderno = I('get.out_trade_no');
vendor('appalipay.AopSdk');
$aop = new \AopClient();
$aop->alipayrsaPublicKey = $ali_alipayrsaPublicKey;
$result = $aop->rsaCheckV2(I('get.'), '', 'RSA2');//验证
if ($result) {
//回调处理 前台调用可触发其他前台事件
echo 'success';//返回success后支付宝不再请求
} else {
echo "支付数据校验失败-2!";
//失败处理
}
}
异步处理 //异步必须有
function h5alinotify() {
$orderno = I('post.out_trade_no');
vendor('appalipay.AopSdk');
$aop = new \AopClient();
$aop->alipayrsaPublicKey = $ali_alipayrsaPublicKey;
$result = $aop->rsaCheckV2(I('post.'), '', 'RSA2');
if ($result) {
//回调处理 后台调用不会触发前台事件
echo "success";
} else {
echo "fail";
}
}
退款
function _alipayRefund($money, $orderNo, $payno, $uid) {
$arr = array(
'subject' => '退款',
'out_trade_no' => $orderno,//与支付宝发生交易的订单号
'trade_no' => $payno,//交易单号
'refund_amount' => $money,//退款金额
'operator_id' => $uid, //记录信息随意设置
);
vendor('appalipay.AopSdk');
$c = new \AopClient();
$c->gatewayUrl = "https://openapi.alipay.com/gateway.do";
$c->appId =$app_id;
$c->rsaPrivateKey = $ali_rsaPrivateKey;
$c->format = "json";
$c->charset = "GBK";
$c->signType = "RSA2";
$c->alipayrsaPublicKey = $ali_alipayrsaPublicKey;
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.refund
$request = new \AlipayTradeRefundRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数
//此次只是参数展示,未进行字符串转义,实际情况下请转义
$request->setBizContent(json_encode($arr));
$result = $c->execute($request);
$this->siteLogsPay('支付宝退款处理结果:' . $orderNo . ':' . json_encode($result, JSON_UNESCAPED_UNICODE), date('Ymd', strtotime('now')), 'userrefund');//最好记录日志
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if ($resultCode && $resultCode == 10000) {
//退款成功处理
$this->ajaxReturn(array('status' => 200));
} else {
//退款失败处理
$this->ajaxReturn(array('status' => -200));
}
}
转载请注明出处