zoukankan      html  css  js  c++  java
  • ThinkPHP5.0 实现 app支付宝支付功能

    前几天做APP开发,用到了支付宝接口,简单写一下我做的APP接入支付宝支付的过程,希望对做APP支付宝支付的童鞋有帮助,

    不懂的可以先去支付平台看一下支付宝支付的文档,我是下的demo看的,这个是用tp5.0做的,先上图:

    至于支付接口的接口包文件自己下吧,这个我就不提供地址链接了,这个支付接口我用的是异步回调,好像现在版本的支付宝同步回调只能用来跳转页面用了,哎,不说了,看代码吧。

    做这个支付宝支付我总共用到了三个控制器:

    1:支付宝支付控制器。

    2:支付宝支付配置参数控制器。

    3:支付宝回调地址控制器。

    好了,首先创建个支付宝支付的控制器,是由上个页面选择好支付方式之后确认支付后需要经过的控制器(这里选择的是支付宝支付),代码 如下:

    复制代码
    复制代码
     1 <?php
     2 namespace appmobilecontroller;
     3 use appmobilemodelGoods;
     4 use appmobilemodelOrderGoods;
     5 use thinkController;
     6 
     7 class Pay extends Controller
     8 {
     9     public function pay_order()
    10     {
    11         $res = new OrderGoods();
    12         //获取订单号
    13         $where['id'] = input('post.order_sn');
    14         $reoderSn = input('post.order_sn');
    15         //查询订单信息
    16         $order_info = $res->where($where)->find();
    17         //获取支付方式
    18         $pay_type = input('post.pay_type');//微信支付 或者支付宝支付
    19         //获取支付金额
    20         $money = input('post.totle_sum');
    21         //判断支付方式
    22         switch ($pay_type) {
    23             case 'ali';//如果支付方式为支付宝支付
    24 
    25                 //更新支付方式为支付宝
    26                 $type['pay_type'] = 'ali';
    27                 $res->where($where)->update($type);
    28 
    29                 //实例化alipay类
    30                 $ali = new Alipay(); 
    31 
    32                 //异步回调地址
    33                 $url = 'XXXXXXXXXXXXXXXXXX/Callback/aliPayBack';
    34              
    35                 $array = $ali->alipay('商品名称', $money,$reoderSn,  $url);
    36                 
    37                 if ($array) {
    38                     return $array;
    39                 } else {
    40                     echo json_encode(array('status' => 0, 'msg' => '对不起请检查相关参数!@'));
    41                 }
    42                 break;
    43             case 'wx';
    44                 
    45                 break;
    46         }
    47     }
    48 }
    复制代码
    复制代码

    然后又创建了一个Alipay控制器,写支付宝配置参数,代码如下:

    复制代码
    复制代码
     1 class AliPay extends Controller
     2 {
     3 
     4     protected $appId = '';//支付宝AppId
     5     protected $rsaPrivateKey = '';//支付宝私钥
     6     protected $aliPayRsaPublicKey = '';//支付宝公钥
     7     private $seller = '';
     8 
     9     /*
    10      * 支付宝支付
    11      */
    12     public function aliPay($body, $total_amount, $product_code, $notify_url)
    13     {
    14         /**
    15          * 调用支付宝接口。
    16          */
    17         /*import('.Alipay.aop.AopClient', '', '.php');
    18         import('.Alipay.aop.request.AlipayTradeAppPayRequest', '', '.php');*/
    19         Loader::import('AlipayaopAopClient', EXTEND_PATH);
    20         Loader::import('Alipayaop
    equestAlipayTradeAppPayRequest', EXTEND_PATH);
    21 
    22         $aop = new AopClient();
    23 
    24         $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
    25         $aop->appId = $this->appId;
    26         $aop->rsaPrivateKey = $this->rsaPrivateKey;
    27         $aop->format = "json";
    28         $aop->charset = "UTF-8";
    29         $aop->signType = "RSA2";
    30         $aop->alipayrsaPublicKey = $this->aliPayRsaPublicKey;
    31         $request = new AlipayTradeAppPayRequest();
    32         $arr['body'] = $body;
    33         $arr['subject'] = $body;
    34         $arr['out_trade_no'] = $product_code;
    35         $arr['timeout_express'] = '30m';
    36         $arr['total_amount'] = floatval($total_amount);
    37         $arr['product_code'] = 'QUICK_MSECURITY_PAY';
    38         
    39         $json = json_encode($arr);
    40         $request->setNotifyUrl($notify_url);
    41         $request->setBizContent($json);
    42 
    43         $response = $aop->sdkExecute($request);
    44         return $response;
    45 
    46     }
    47 
    48 
    49     function createLinkstring($para)
    50     {
    51         $arg = "";
    52         while (list ($key, $val) = each($para)) {
    53             $arg .= $key . "=" . $val . "&";
    54         }
    55         //去掉最后一个&字符
    56         $arg = substr($arg, 0, count($arg) - 2);
    57 
    58         //如果存在转义字符,那么去掉转义
    59         if (get_magic_quotes_gpc()) {
    60             $arg = stripslashes($arg);
    61         }
    62 
    63         return $arg;
    64     }
    65 
    66 
    67     function argSort($para)
    68     {
    69         ksort($para);
    70         reset($para);
    71         return $para;
    72     }
    73 }
    复制代码
    复制代码

    Alipay支付demo我放在extend目录下了,用这种方法来实现支付宝支付的话,上面的那个支付宝配置参数控制器的内容除了支付宝Appid,支付宝公钥,私钥,收款人账号,其他的照搬下来就行了,现在已经写了两个控制器了,接下来还有一个异步回调地址。这个异步回调有点坑了,支付成功有时候就是不回调,先上代码吧

    复制代码
    复制代码
     1 <?php
     2 namespace appmobilecontroller;
     3 use appmobilemodelOrderGoods;
     4 use appmobilemodelIntegralRecord;
     5 use appadminmodelSystemSettings;
     6 use appmobilemodelMembers;
     7 use thinkController;
     8 use thinkRequest;
     9 use thinkDb;
    10 
    11 class Callback extends Controller
    12 {
    13     /*
    14      * 支付宝支付回调修改订单状态
    15      */
    16     public function aliPayBack()
    17     {
    18 
    19         if ($_POST['trade_status'] == 'TRADE_SUCCESS') {//如果支付成功
    20             //===============修改订单状态===========================//
    21             $order = new OrderGoods();//实例化
    22             $orderSn = $_POST['out_trade_no'];//获取订单号
    23                 $where['order_sn'] = $orderSn;
    24                 $data1['type'] = 2;
    25             $order->where($where)->update($data1);//修改订单状态
    26             echo 'success';
    27             exit;
    28         }
    29     }
    30 }
    复制代码
    复制代码

    OK现在代码写完了。执行支付宝支付订单的时候先进入支付宝Pay控制器接收POST传递的三个参数,订单号,金额,支付方式。接收到之后写商品名称,商品描述,回调地址等 然后实例化Alipay类调用这个类里面的aliPay方法进行支付,调用结果返回一个签名,把这个签名反馈给app端进行支付,支付成功后执行异步回调,修改订单状态,当然还有一些细节操作就不说了,我是已经弄好了,回调这个地方是个坑,大家做的时候一定要仔细认真,耐心才行。现在流程已经走完了,希望能对做这个功能的童鞋有所帮助。

    本文属原创内容,为了尊重他人劳动,转载请注明本文地址:

    http://www.cnblogs.com/luokakale/p/7612365.html

  • 相关阅读:
    sql测试
    sql时间和日期函数
    递归算法
    冒泡排序
    Ajax
    省市区下拉框三级联动
    Repeater用法
    WIndows form Linq多表联合
    C# 递归算羊
    C# 定义一个学生的结构体,输入学生信息,学号,姓名,身高,按身高排序输出
  • 原文地址:https://www.cnblogs.com/jasonLiu2018/p/11848587.html
Copyright © 2011-2022 走看看