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 相关文章推荐
ThinkPHP中实例Model方法的区别说明
Aug 21 PHP
PHP学习之数组值的操作
Apr 17 PHP
php中用于检测一个地理IP地址是否可用的代码
Feb 19 PHP
PHP获取数组中某元素的位置及array_keys函数应用
Jan 29 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
May 03 PHP
PHP SPL使用方法和他的威力
Nov 12 PHP
Yii中使用PHPExcel导出Excel的方法
Dec 26 PHP
PHP实现生成推广海报的方法详解
Mar 14 PHP
YII框架http缓存操作示例
Apr 29 PHP
php查看一个变量的占用内存的实例代码
Mar 29 PHP
如何用RabbitMQ和Swoole实现一个异步任务系统
May 29 PHP
详细分析PHP7与PHP5区别
Jun 26 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实现笛卡尔积算法的实例讲解
2019/12/22 PHP
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
js和jquery设置disabled属性为true使按钮失效
2014/08/07 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
Vue 父子组件的数据传递、修改和更新方法
2018/03/01 Javascript
详解如何用VUE写一个多用模态框组件模版
2018/09/27 Javascript
Vue+Element UI+Lumen实现通用表格分页功能
2019/02/02 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
Vue和React有哪些区别
2020/09/12 Javascript
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
用实例解释Python中的继承和多态的概念
2015/04/27 Python
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
使用python获取csv文本的某行或某列数据的实例
2018/04/03 Python
Django进阶之CSRF的解决
2018/08/01 Python
基于python实现坦克大战游戏
2020/10/27 Python
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
灵泰克Java笔试题
2016/01/09 面试题
岗位职责的构建方法
2014/02/01 职场文书
社区服务活动报告
2015/02/05 职场文书
热血教师观后感
2015/06/10 职场文书
2016年第32个教师节红领巾广播稿
2015/12/18 职场文书
2019自荐信该如何写呢?
2019/07/05 职场文书