网站首页 文章专栏 支付宝支付流程(H5支付);退款

支付宝支付流程(H5支付);退款

编辑时间:2018-04-19 15:24:37 作者:苹果 浏览量:3309


    前言:引入支付宝SDK web端支付唤醒支付宝APP支付接口;支付宝退款接口 ---------- 特别注意:同步和异步的返回均要验证数据库信息是否更改,避免重复处理操作


以下是几年前写的,原生写法,现已改进,融合了微信和支付宝的各种支付方式,调用方便。详见:《常用微信和支付宝支付方法


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));

     }

}



    出自:何冰华个人网站

    地址:https://www.hebinghua.com/

    转载请注明出处


来说两句吧
最新评论
  • 何冰华个人网站
    匿名 2018-05-07 15:54:02
    666