php支付宝APP支付功能


Posted in PHP onJuly 29, 2020

本文实例为大家分享了php支付宝APP支付的具体代码,供大家参考,具体内容如下

支付宝网页支付

1.支付宝开放平台添加应用,获得appid,并签约。

2.在支付宝开放品台设置如下:

php支付宝APP支付功能

3.配置支付宝的应用公钥。(根据支付宝的文档)

4.在开放平台下载官方sdk demo。

5.代码:

//支付宝
 include_once VENDOR_PATH . 'Alipay/aop/AopClient.php';
 include_once VENDOR_PATH . 'Alipay/aop/request/AlipayTradeAppPayRequest.php';
 $notify_url='https://www.www.com/app/pay/AlipayStep3Notify';
 $config = array(
  'appid' =>$this->appid,//
  'rsaPrivateKey' =>$this->rsaPrivateKey,//开发者私钥私钥
  'alipayrsaPublicKey'=>$this->alipayrsaPublicKey,//支付宝公钥
  'charset'=>strtolower('utf-8'),//编码
  'notify_url' =>$notify_url,//回调地址(支付宝支付成功后回调修改订单状态的地址)
  'payment_type' =>1,//(固定值)
  'seller_id' =>'',//收款商家账号
  'charset' => 'utf-8',//编码
  'sign_type' => 'RSA2',//签名方式
  'timestamp' =>date("Y-m-d H:i:s"),
  'version' =>"1.0",//固定值
  'url' => 'https://openapi.alipay.com/gateway.do',//固定值
  'method' => 'alipay.trade.app.pay',//固定值
 );
  
   $aop = new \AopClient();
   $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
   $aop->appId = $config['appid'];
   $aop->rsaPrivateKey = $config['rsaPrivateKey'];
   $aop->format = "json";
   $aop->charset = "UTF-8";
   $aop->signType = "RSA2";
   $aop->alipayrsaPublicKey=$config['alipayrsaPublicKey'];
  //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
   $request = new \AlipayTradeAppPayRequest();
  //SDK已经封装掉了公共参数,这里只需要传入业务参数
   
   $bizcontent = json_encode([
    'body'=>'**',
    'subject'=>$subject,
    'out_trade_no'=> $order_sn,//此订单号为商户唯一订单号
    'total_amount'=>$totalprice,//保留两位小数
    'product_code'=>'QUICK_MSECURITY_PAY'
   ]);
   $request->setNotifyUrl($config['notify_url']);
   $request->setBizContent($bizcontent);
  //这里和普通的接口调用不同,使用的是sdkExecute
   $response = $aop->sdkExecute($request);
  //htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
  $datas=$response;//就是orderString 可以直接给客户端请求,无需再做处理。
  $this->arr['code']=0;
  $this->arr['msg']=$order_sn;
  $this->arr['info']=$datas;
  echo json_encode($this->arr);exit;

6.支付回调notify_url。

include_once VENDOR_PATH . 'Alipay/aop/AopClient.php';
  $aop = new \AopClient();
  $config['alipayrsaPublicKey']=$this->$alipayrsaPublicKey;//公钥
  $aop->alipayrsaPublicKey = $config['alipayrsaPublicKey'];
  //此处验签方式必须与下单时的签名方式一致
  $flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");
  //验签通过后再实现业务逻辑,比如修改订单表中的支付状态。
  /**
  ①验签通过后核实如下参数out_trade_no、total_amount、seller_id
  ②修改订单表
  **/
  $out_trade_no = I('post.out_trade_no'); //商户订单号

之后对数据库对应的数据进行修改。

7.订单查询接口:

include_once VENDOR_PATH . 'Alipay/aop/SignData.php';
 include_once VENDOR_PATH . 'Alipay/aop/AopClient.php';
 include_once VENDOR_PATH . 'Alipay/aop/request/AlipayTradeQueryRequest.php';
 $config = array(
  'appid' =>$this->appid,//
  'rsaPrivateKey' =>$this->rsaPrivateKey,//开发者私钥私钥
  'alipayrsaPublicKey'=>$this->alipayrsaPublicKey,//支付宝公钥
  'charset'=>strtolower('utf-8'),//编码
  'notify_url' =>'',//回调地址(支付宝支付成功后回调修改订单状态的地址)
  'payment_type' =>1,//(固定值)
  'seller_id' =>'',//收款商家账号
  'charset' => 'utf-8',//编码
  'sign_type' => 'RSA',//签名方式
  'timestamp' =>date("Y-m-d H:i:s"),
  'version' =>"1.0",//固定值
  'url' => 'https://openapi.alipay.com/gateway.do',//固定值
  'method' => 'alipay.trade.query',//固定值
 );
  
   $aop = new \AopClient();
   $aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";
   $aop->appId = $config['appid'];
   $aop->rsaPrivateKey = $config['rsaPrivateKey'];
   $aop->format = "json";
   $aop->charset = "UTF-8";
   $aop->signType = "RSA2";
   $aop->method = $config['method'];
   $aop->apiVersion = '1.0';
   $aop->alipayrsaPublicKey=$config['alipayrsaPublicKey'];
  //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.query
   $request = new \AlipayTradeQueryRequest();
 
   $bizcontent = json_encode([
    'out_trade_no'=>$order_sn,
    'trade_no'=>''
   ]);
   
   $request->setBizContent($bizcontent);
  
   $response = $aop->execute($request);
 
   $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
   $resultCode = $response->$responseNode->code;
   if(!empty($resultCode)&&$resultCode == 10000){
 
    $this->arr['code']=0;
    $this->arr['msg']='success';
    echo json_encode($this->arr);exit;
  
   } else {
    $this->arr['code']=100001;
    $this->arr['msg']='未查询到订单信息';
    echo json_encode($this->arr);exit;
   
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP获取文件绝对路径的代码(上一级目录)
May 29 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
Sep 09 PHP
基于PHP的简单采集数据入库程序【续篇】
Jul 30 PHP
PHP中数据库单例模式的实现代码分享
Aug 21 PHP
php判断邮箱地址是否存在的方法
Feb 13 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
PHP编辑器PhpStrom运行缓慢问题
Feb 21 PHP
使用 laravel sms 构建短信验证码发送校验功能
Nov 06 PHP
PHP判断是否是微信打开还是浏览器打开的方法
Feb 27 PHP
PHP token验证生成原理实例分析
Jun 05 PHP
Laravel timestamps 设置为unix时间戳的方法
Oct 11 PHP
让whoops帮我们告别ThinkPHP6的异常页面
Mar 02 PHP
PHP多个图片压缩成ZIP的方法
Aug 18 #PHP
PHP上传文件及图片到七牛的方法
Jul 25 #PHP
详解PHP版本兼容之openssl调用参数
Jul 25 #PHP
PHP实现的多维数组去重操作示例
Jul 21 #PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
Jul 21 #PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
Jul 20 #PHP
ThinkPHP 3使用OSS的方法
Jul 19 #PHP
You might like
php的计数器程序
2006/10/09 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
js中function()使用方法
2013/12/24 Javascript
JS+DIV实现鼠标划过切换层效果的方法
2015/05/25 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
2019/05/14 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
springboot+vue实现文件上传下载
2020/11/17 Vue.js
python内存管理分析
2015/04/08 Python
基于python实现的抓取腾讯视频所有电影的爬虫
2016/04/22 Python
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
简单实现python画圆功能
2018/01/25 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
使用python实现名片管理系统
2020/06/18 Python
EJB面试题
2015/07/28 面试题
音乐专业应届生教师求职信
2013/11/04 职场文书
餐饮业员工工作决心书
2014/03/11 职场文书
奉献演讲稿范文
2014/05/21 职场文书
三方股东合作协议书
2014/10/28 职场文书
群众路线学习心得体会范文
2014/11/05 职场文书
行政主管岗位职责
2015/02/03 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android