admin 发表于 2023-11-22 18:24:18

PHP调用支付宝APP支付(Thinkphp)

PHP调用支付宝APP支付(Thinkphp)
PHP调用支付宝APP支付(Thinkphp),伸手党可直接修改使用, 注意:以下代码为本人在实际开发中的代码,只是写了写简单的实现逻辑代码,详细代码就不罗列出来啦,若你需要使用请结合自身业务修改即可
<?php
#调用支付宝APP支付
    public function pay(){
      Vendor('alisdk.AopSdk');//载入sdk类
      $aop = new \AopClient;
      $idCode = I('idCode');
      $price = M('Bill')->where(array('idCode'=>$idCode))->getField('price');
      $out_trade_no = time().mt_rand(10000,99999);
      $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";#此处为真实支付网关,若用沙箱环境记得使用沙箱测试的网关
      $aop->appId = "20171*******787064";
      $aop->rsaPrivateKey = '*************LsnY/LF2ImP94EpPYkjS0HJcIp8iqPMzJjk5AwZB2txnbkG6ULl6Hn/nKrLixxfbFiXwKDfw7blj0zP5gmHKb45NnKvhYZVkuf2aRm409oy3KJC+J2EPjeAjj8pA+Uz9lKR8YmjzIOxqZ9YCzsgNXd7dw4ARo95yK8r1IlOYRX24dz/mhgFtMoPWcOzRLXMDhUhR0lxplU5m1PEbh5+mDFss7GyUxvOrbwZoeik14Chc5BJirL9kA2C8sXkEI0+xTJPXXjQc0iMr3tvXgQCh/+dtw2Q99IaK5b06kCXPHIzI9LKCVOitk8kVwo5E2eDXvRdyovLs3LzlQSSQIDAQABAoIBAQDRrR4eP1hxGtgEDNExvvd2AndoBi92CaBHaWFg9DzOCPT6isO3moTtQh1ltwxeE6ngwQobkSOi9ObmDhGdqh6wQfPylFjJrr4B25E4l3Qt+nWDDOYUVOajGYFG/XhtZWyfjn8cLLtfiNkSYClvRsy5+C/EgOgqSDnGtvlDN4pnUI5UPNAgZkPDqpH0sjwh4rykxU6Lti5YN2Lp6ttw64nMP0lGt2snu5CYwL5jwUphWobPusd4MBqAxy0fNhHkKaOUDk5uRc9vDs9UZw6MIgGvO/UCK4sDTTwxzcHqc7************l9gMWpSUAgKHawH77736na1ACaGa6/RAoGBAPqDknwP5IURNu7SptW8zYtSye7EEa0sqJ/CJnMCSC/KDk4K4dbcwmPsnZWAChlaHm9kQPRAwZFSC9S83ZgG3GGB/SOO0Vq6wulhlyv572Sy1REaUl9RNH+mMFxSSpb9gVM4L82/0aS0QkfzgxAH8LtU97JSgBPJISTmOkwwjDWvAoGBAN26YONTQBfPPTkREBq8XS1+g1xZLp3YQyGnEScklObqoBN/Fnml+9xBfWTLcYY+E+SUHQKuT1b6SeLXhNu10hPLnVLCLugYm1gHmrrSNrgvRLsh7JR/HaqfY6hjVJKcbuE8sMmWwNXun4w/eO04lR4hWUqaKWPIarzFyqsRTC2HAoGBAKpiHplevdB7et9ISsyIk0w1TL6mgFdGTpIKHNiQLsTCKqSN5jibAWOxJSTvZu8DSjv89eiquny6Tu2sXxLtZ6qyHJe4pU+OQs803vq8DURyFVSCkI/fzVMclzvThIPZe8I8LtdDpbTeHU6Oow+eNu9SxP11+0J5w58zL2duhY5lAoGANwWUG3VCN2ZW8/1W+Lt7h9mYMWd0GPlcl1JFAGikhrT8ajokUqWs3VhnDIcrsbtf5l4W4N5uk8/iW+dNcdQpwH3LmYjUaQYKLosci3W03HnmXWWqtqLgssGA0n1rtEIbhcswt6WwTqY7c2sg0AU1g9eUt92PndJTImsWwuK0+6sCgYAUvrIyQ4+aDOu1Hrol/vVGoaIzkibVOYeJCvg1zeKS5VHcpm32sW066VIgAIGwT72ZIhFalB/n3MoIA0sep1ZS6fC01B/ZjogQKwMlSdvyu+adX9aQRAGHgDeadBgqbEBPXixrgZWrTD9pYStXoRmfwcHqz7iUrKi8iCA+++++++';//请填写开发者私钥去头去尾去回车,一行字符串
      $aop->format = "json";
      $aop->charset = "UTF-8";
      $aop->signType = "RSA2";
      $aop->alipayrsaPublicKey = '###########iG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtxZxk98EVMDRv7ByKgmg5f9r/Q3d2rjfUpBQ+8M448PidkqwwRtZZJk8LzwryHi2Da2bWT/n+/9aNad7R7g+lvj5lKHJ2hQywl/Dfe14ck/UUfeJ3bmRE8cScSaYu9ufO4GN/Al6pyOTGgNM9dwP5Tyy2IQAfatnhoMYKGW0QkPe9igmmFa5m6lQAl7F5dt5XQZFtO5yv4BiZdnfcNicvMPFA77WwbzbBoI8Fab+Rf3pLD9q8P8EfiX5ErpHX6xl59hfqNkzZHHa5/IPHQGKm1Iy0yxfQp/5zNjmdTiFWad6DPI+wvQwqzCeIfas/aIb/AphLO4c2jr0iwbr2bsDKQIDAQAB';//请填写支付宝公钥,一行字符串
      //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
      $request = new \AlipayTradeAppPayRequest();
      //SDK已经封装掉了公共参数,这里只需要传入业务参数
      $bizcontent = json_encode([
            // "idCode"   => I('idCode'),
            "body"       => I('service'),
            "subject"   => I('title'),
            "passback_params" => UrlEncode(I('idCode')),
            "business"=> I('name'),//商家
            "out_trade_no"=> $out_trade_no,
            // "idCode" => I('idCode'),
            "timeout_express"   => '10m',
            "product_code"=> "QUICK_MSECURITY_PAY",
            "total_amount"=> $price,
      ]);
      $request->setNotifyUrl("http://0.0.0.0/app/index.php/Home/Goods/msg");//商户外网可以访问的异步回调地址
      $request->setBizContent($bizcontent);
      //这里和普通的接口调用不同,使用的是sdkExecute
      $response = $aop->sdkExecute($request);
      //htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
      // echo htmlspecialchars($response);//就是orderString 可以直接给客户端请求,无需再做处理。      
      $this->shows(200,'',$response);

    }
    // 支付异步回调请求
    public function msg(){
      Vendor('alisdk.AopSdk');
      $aop = new \AopClient;
      $aop->alipayrsaPublicKey = '***********QEFAAOCAQ8AMIIBCgKCAQEAtxZxk98EVMDRv7ByKgmg5f9r/Q3d2rjfUpBQ+8M448PidkqwwRtZZJk8LzwryHi2Da2bWT/n+/9aNad7R7g+lvj5lKHJ2hQywl/Dfe14ck/UUfeJ3bmRE8cScSaYu9ufO4GN/Al6pyOTGgNM9dwP5Tyy2IQAfatnhoMYKGW0***********mmFa5m6lQAl7F5dt5XQZFtO5yv4BiZdnfcNicvMPFA77WwbzbBoI8Fab+Rf3pLD9q8P8EfiX5ErpHX6xl59hfqNkzZHHa5/IPHQGKm1Iy0yxfQp/5zNjmdTiFWad6DPI+wvQwqzCeIfas/aIb/AphLO4c2jr0iwbr2bs######B';// 填写支付宝公钥,一行字符串
      $flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");// 验签
      // 判断验签
      if ($flag) {#验签通过
            $trade_status = $_POST['trade_status'];
            $idCode = $_POST['passback_params'];
            $price = $_POST['total_amount'];
            $subject = json_decode($_POST['subject']);
            // 判断交易状态
            if ($trade_status == 'TRADE_FINISHED' || $trade_status == 'TRADE_SUCCESS') {
                #把回调信息写入文档记录起来,方便查看回调信息
                #$files = fopen("file.txt", "w");
                #fwrite($files, json_encode($_POST));
                #fclose($files);
                $res = M('Order')->where(array('idCode'=>$idCode))->setField('staus',1);
                if ($res) {
                  echo "success";// 告知支付宝支付成功 请勿修改,否则支付宝会一直回调!!!
                } else {
                  echo "fail";
                }
            } else {
                echo "fail";
            }
      } else {
            echo "fail";
      }
    }
页: [1]
查看完整版本: PHP调用支付宝APP支付(Thinkphp)