·设为首页收藏本站📧邮箱修改🎁免费下载专区🔐设置/修改密码👽群雄群聊
返回列表 发布新帖

支付宝SDK demo在thinkphp5.0下的实际应用 -- 适合新手

265 0
发表于 2023-4-21 19:04:39 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
注:至于如何申请支付宝支付以及获取相关密钥不在此范围内。
本篇文章只是针对代码层面。
第一步:从支付宝相关页面下载sdk php版本的压缩包,将其文件解压到:extend\alipaySDK 目录下,如下图:
支付宝SDK demo在thinkphp5.0下的实际应用 -- 适合新手 支付,支付宝,实际,实际应用,应用
第二步:直接上代码 并将代码放入文件 test\controller\alipay.php 中[拿走,不谢]:
  1. <?php
  2. namespace app\test\controller;
  3. use think\Controller;
  4. use think\Request;
  5. ////// 支付宝相关配置 参数  start ///////////
  6. define("AOP_SDK_WORK_DIR", RUNTIME_PATH . "/alipaytmp/");
  7. define("AOP_SDK_DEV_MODE", true);//如果要提高性能可以设置为false
  8. ////// 支付宝相关配置 参数  end ///////////
  9. class Alipay extends Controller {
  10.     private  $filelog = '';
  11.     public function __construct(Request $request = null)
  12.     {
  13.         parent::__construct($request);
  14.         if(!is_dir(AOP_SDK_WORK_DIR))
  15.         {
  16.             @mkdir(AOP_SDK_WORK_DIR, 0777, true);
  17.         }
  18.         $this->filelog = AOP_SDK_WORK_DIR .'alipay.log';
  19.     }
  20.     public function getAlipayConf()
  21.     {
  22.         $conf = config('config_alipay');//支付宝相关配置放在 application/extra/config_alipay.php文件中
  23.         return $conf;
  24.     }
  25.     //请求alipay支付
  26.     public function alipay_request()
  27.     {
  28.         import('.alipaySDK.aop.AopClient', '', '.php');
  29.         import('.alipaySDK.aop.request.AlipayTradeAppPayRequest', '', '.php');
  30.         $filelog = $this->filelog;
  31.         $conf = $this->getAlipayConf();
  32.         $aop = new \AopClient();
  33.         //$aop->gatewayUrl            = config('config_alipay')['gatewayUrl'];
  34.         $aop->appId                 = $conf['appId'];
  35.         $aop->rsaPrivateKey         = $conf['rsaPrivateKey'];
  36.         //$aop->format                = config('config_alipay')['format'];
  37.         //$aop->charset               = config('config_alipay')['charset'];
  38.         $aop->signType              = $conf['signType'];
  39.         $aop->alipayrsaPublicKey    = $conf['alipayRsaPublicKey'];
  40.         $aop->debugInfo=true;
  41.         $request = new \AlipayTradeAppPayRequest();
  42.         $body    = '测试生成的订单'.time();
  43.         //$arr['body']                = $body;
  44.         $arr['subject']             = $body;
  45.         $arr['out_trade_no']        = 'ALI'.time();
  46.         //$arr['out_trade_no']        = 'ALI123456';
  47.         $arr['timeout_express']     = '30m';
  48.         $arr['total_amount']        = floatval(0.01);//单位为元
  49.         $arr['product_code']        = 'QUICK_MSECURITY_PAY';
  50.         $json = json_encode($arr);
  51.         $request->setNotifyUrl('https://dev.xxx.cn/test/alipay/alipay_notify');
  52.         $request->setBizContent($json);
  53.         $response = $aop->sdkExecute($request);
  54.         filelog($filelog, '第1步:发送请求数据:'.json_encode($arr, 320), true);
  55.         filelog($filelog, '第1.1步:得到如下结果:'.json_encode($response, 320), true);
  56.         $ret = urldecode($response);
  57.         //dd($ret);
  58.         //parse_str($response, $retdata);
  59.         ajaxOutFunc(200, $response);
  60.     }
  61.     public function rsaCheckV1($data)
  62.     {
  63.         $aop = new \AopClient();
  64.         $aop->alipayrsaPublicKey = config('config_alipay')['alipayRsaPublicKey'];
  65.         $flag = $aop->rsaCheckV1($data, NULL, "RSA2");
  66.         return $flag;
  67.     }
  68.     //接收通知
  69.     public function  alipay_notify()
  70.     {
  71.         import('.alipaySDK.aop.AopClient', '', '.php');
  72.         $filelog = $this->filelog;
  73.         filelog($filelog, '第==步:开始接收通知', true);
  74.         //回调回来是个数组,你们可以用var_export接受下放在文件中查看
  75.         //把生成json后,然后ksort()排序,去除sign_type,sign,拼接成body=Hello&buyer_email=13788888888&buyer_id=2088002007013600..............这样字符串
  76.         filelog($filelog, '第2.0步:得到如下原始通知:'.json_encode(input(''), 320), true);
  77.         $data   = input('post.');
  78.         filelog($filelog, '第2.1步:得到如下原始通知:'.json_encode($data, 320), true);
  79.         $org_str = var_export($data, true);
  80.         filelog($filelog, '第2.2步:原始通知执行var_export后:'. json_encode($org_str, 320), true);
  81.         filelog($filelog, '第3步:拼接成连接串:'.http_build_query($data), true);
  82.         $check = $this->rsaCheckV1($data);
  83.         filelog($filelog, '第4步:验证签名结果:'.json_encode($check, 320), true);
  84.         /**
  85.          *  ①验签通过后核实如下参数out_trade_no、total_amount、seller_id
  86.          *  ②修改订单表
  87.          **/
  88.         //打印success,应答支付宝。必须保证本界面无错误。只打印了success,否则支付宝将重复请求回调地址。
  89.         if($check) {
  90.             echo 'success';
  91.         }else{
  92.             echo 'fail';
  93.         }
  94.     }
  95.     /**
  96.      * 支付宝退款--原路退回
  97.      */
  98.     public function ali_refund()
  99.     {
  100.         $out_trade_no = input('out_trade_no', '');       //订单号
  101.         if(empty($out_trade_no))
  102.         {
  103.             exit('$out_trade_no为空');
  104.         }
  105.         $filelog = AOP_SDK_WORK_DIR .'alipay_refund.log';
  106.         import('.alipaySDK.aop.SignData', EXTEND_PATH, '.php');
  107.         import('.alipaySDK.aop.AopClient', '', '.php');
  108.         import('.alipaySDK.aop.request.AlipayTradeRefundRequest', EXTEND_PATH, '.php');
  109.         //import('alipaySDK.aop.AopClient', EXTEND_PATH, '.php');
  110.         $biz_content = [
  111.             'out_trade_no'  => $out_trade_no,
  112.             'trade_no'      => '',
  113.             'refund_amount' => '0.01',//单位为元
  114.             'out_request_no'=> '',
  115.         ];
  116.         $json_biz   = json_encode($biz_content);
  117.         filelog($filelog, '第0步:开始退款了,退款数据:'.json_encode($biz_content, 320), true);
  118.         $config = $this->getAlipayConf();
  119.         $aop = new \AopClient();
  120.         $aop->gatewayUrl = $config['gatewayUrl'];
  121.         $aop->appId = $config['appId'];
  122.         $aop->rsaPrivateKey = $config['rsaPrivateKey'];
  123.         $aop->alipayrsaPublicKey=$config['alipayRsaPublicKey'];
  124.         $aop->apiVersion = '1.0';
  125.         $aop->signType = $config['signType'];
  126.         $aop->postCharset=$config['charset'];
  127.         $aop->format='json';
  128.         filelog($filelog, '第1步:准备请求:AlipayTradeRefundRequest退款接口', true);
  129.         $request = new \AlipayTradeRefundRequest();
  130.         $request->setBizContent($json_biz);
  131.         $result = $aop->execute($request);
  132.         filelog($filelog, '第3步:发送数据:'.json_encode($biz_content, 320), true);
  133.         filelog($filelog, '第4步:返回数据:'.json_encode($result, 320), true);
  134.         $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
  135.         $resultCode = $result->$responseNode->code;
  136.         if(!empty($resultCode) && $resultCode == 10000){
  137.             echo "成功";
  138.         } else {
  139.             echo "失败";
  140.         }
  141.     }
  142. }
复制代码

注:filelog用于文件记录函数,ajaxOutFunc用于输出json字符串。
建议:各位新手,如果项目紧急,可以直接拿代码下来,加上你的业务逻辑,即可使用。如果项目不是非常赶,可以到github上找一款第三方开源的集成支付宝、微信支付的sdk。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图

您的IP:18.191.180.252,61.170.99.78,GMT+8, 2024-5-17 22:11 , Processed in 0.170297 second(s), 72 queries , Gzip On, Redis On.

Based on Discuz! W1.0 Licensed

© 2001-2024 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表