浅谈TP3.2.3支付宝APP支付

今天来介绍一下支付宝的APP支付吧,首先要去蚂蚁金服注册个账号,这个不用多说了。然后再创建一个应用,这个也不用说了。不过有一点,须将应用上线后才可以签约APP支付,不然你会发现等了半年发现签约还没下来~~~ 
一系列的流程下来后,你会得到一个APPID

首先说一下环境配置问题吧 
浅谈TP3.2.3支付宝APP支付_第1张图片

第一个配置支付宝网关是固定的:https://openapi.alipay.com/gateway.do 
第二个配置和第三个配置原则上是可以一样的:可以填上你的支付完成回调地址

再说下接口加签方式,这个环节是必不可少的。 
支付宝为我们提供了一个生成秘钥的工具,我们可以下载他来生成,然后复制到蚂蚁金服开发者平台上。 
打开工具,我们选择非JAVA适用的 和密钥长度为2048的,这时会自动给我们生成一串商户应用私钥和商户应用公钥(记住他们的名字,哈哈) 
浅谈TP3.2.3支付宝APP支付_第2张图片 
这个时候就把你刚刚生成的商户应用公钥(名字别搞错了)放到蚂蚁金服开发者平台上面 
浅谈TP3.2.3支付宝APP支付_第3张图片 
浅谈TP3.2.3支付宝APP支付_第4张图片 
这个时候蚂蚁金服会帮你生成一个支付宝公钥,记住这个名字,配置要用到。 
接下来就可以开始走我们的支付流程了,哦,忘记了API的下载地址了~ 
这个是服务端SDK下载地址,选择PHP就OK了,https://docs.open.alipay.com/54/103419/ 
下面就开始我们的代码~~~~~~~~~ 
首先说一下配置

return [
    'ALI_CONFIG'  => array(
            'gatewayUrl'            => 'https://openapi.alipay.com/gateway.do',//支付宝网关(固定)'
            'appId'                 => '',//APPID即创建应用后生成
            'seller_id'             => '这个是可以在蚂蚁金服开发者中心的右上角查看账户信息中获得,在角色身份那一栏,PID就是',
            //由开发者自己生成: 请填写开发者私钥
            'rsaPrivateKey'         =>  '这个是你使用工具自己生成的商户私钥',
            //支付宝公钥,由支付宝生成: 请填写支付宝公钥,一行字符串
            'alipayrsaPublicKey'    =>  '记住这里是支付宝公钥不是应用公钥',
            'notifyUrl'             => '这里要跟你在蚂蚁金服配置的回调地址一样', // 支付成功通知地址
        ),
];
public function app_pay($order_id){
    //导入支付宝类
    Vendor('Alipay.aop.AopClient');
    Vendor('Alipay.aop.request.AlipayTradeAppPayRequest');
    $aop = new \AopClient();
    $aliConfig = C('ALI_CONFIG');
    //配置基本参数
    //网关
    $aop->gatewayUrl = $aliConfig['gatewayUrl'];
    //appid
    $aop->appId = $aliConfig['appId'];
    //开发者私钥
    $aop->rsaPrivateKey = $aliConfig['rsaPrivateKey'];
    //支付宝公钥
    $aop->alipayrsaPublicKey=$aliConfig['alipayrsaPublicKey'];
    $aop->apiVersion = '1.0';固定参数
    $aop->postCharset='utf-8';固定参数
    $aop->format='json';固定参数
    $aop->signType='RSA2';固定参数
    //商户订单编号
    $out_trade_no = $order_id;商家自己生成的订单id
    //描述
    $body = 'test';
    //标题
    $subject = 'test';
    //查询订单价格,支付宝的价格和微信的有所不同,如果是1元的话就是1.00,10元的话就是10.00
    $order_amount = number_format($money, 2);
    $request = new \AlipayTradeAppPayRequest();
    $bizContent = "{" .
    "    \"body\":\"$body.\"," .
    "    \"subject\":\"$subject\"," .
    "    \"out_trade_no\":\"$out_trade_no\"," .
    "    \"timeout_express\":\"30m\"," .
    "    \"total_amount\":$order_amount," .
    "    \"product_code\":\"QUICK_WAP_WAY\"" .
    "  }";
    //异步回调地址
    $request->setNotifyUrl($aliConfig['notifyUrl']);
    发送数据内容到支付宝
    $request->setBizContent($bizContent);
    $response = $aop->sdkExecute($request);
    if($response){
        return $response;返回这一大串给前端就完成的支付宝APP支付的调用
    }
}

接下来就说下回调(其实如下代码都是固定,只是修改订单状态的那一栏大家会有所不同,毕竟不同人有不同的习惯)

public function alinotify(){
        //导入支付宝类
        Vendor('Alipay.aop.AopClient');
        $aop = new \AopClient;
        $aop->alipayrsaPublicKey = C('ALI_CONFIG')['alipayrsaPublicKey'];
        $flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
        if($flag){
            //商户订单号
            $out_trade_no = $_POST['out_trade_no'];
            //支付宝交易号
            $trade_no = $_POST['trade_no'];
            //交易状态
            $trade_status = $_POST['trade_status'];
            //订单的实际金额
            $total_amount = $_POST['total_amount'];
            //appid
            $appid = $_POST['app_id'];
            $seller_id = $_POST['seller_id'];
            //验证app_id是否为商户本身
            if($appid != C('ALI_CONFIG')['appId']){
                exit('fail');
            }
            //判断交易通知状态是否为TRADE_SUCCESS或TRADE_FINISH
            if($trade_status!='TRADE_FINISH' && $trade_status !='TRADE_SUCCESS'){
                exit('fail');
            }
            //验证订单的准确性
            if(!empty($out_trade_no)){
                //在这里可以通过返回的商家订单号查询出该订单的信息
                $res = xxx;
                if(!$res){
                    exit('fail');
                }

                //判断total_amount是否确实为该订单的实际金额
                if($total_amount != $res){
                    exit('fail');
                }
                //判断seller_id是否与商户的id相同
                if($seller_id != C('ALI_CONFIG')['seller_id']){
                    exit('fail');
                }
            }
            //全部验证成功后修改订单状态
            doAliPay方法用于进行修改订单状态的逻辑,可以放手发挥了
            $data = $this->doAliPay($out_trade_no,$trade_no);
            if($data){
                //处理业务逻辑
                echo 'success';
            } else {
                echo 'fail';
            }
        } else {
            echo 'fail';
        }
    }

就是这么简单的过程~送给各位学习TP的小伙伴

你可能感兴趣的:(浅谈TP3.2.3支付宝APP支付)