首页 > 编程 > PHP > 正文

php 服务端集成支付宝APP支付的方法

2020-03-22 17:23:18
字体:
来源:转载
供稿:网友
下面为大家分享一篇php 服务端集成支付宝APP支付实例,具有很好的参考价值,希望对大家有所帮助。一起过来看看吧

支付宝支付分为了很多种场景,这里只讲述支付宝APP支付功能集成,期间遇到了特别大的坑,因此我简单描述下集成过程,并概述遇到的问题及解决方案

由于公司业务简单,只支持支付宝支付,而无需关心退款,查询等等额外功能,因此该篇内容仅仅讲述支付宝支付接口时服务端如何准备APP拉取支付订单的信息,大概流程如下

一、创建应用及配置

首先,需要到蚂蚁金服开发平台(open.alipay.com)注册应用,并获取应用ID,并配置应用,这里在配置时主要是签约,生成应用的RSA2公私钥,同时获取到支付宝提供的支付公钥等,这部分网址后台都有提示,比较简单

二、下载对应SDK

这里我是在PHP后台集成服务,因此下载的是PHP SDK,地址:http://docs.open.alipay.com/54/103419/

三、准备一个可以访问的真实域名

四、案例

当以上三部完成之后,此时就可以进入配置我们自己的业务代码了

4.1、组织APP支付时的支付订单信息

 ?phprequire_once (__DIR__. /alipay-sdk-PHP-20171023143822/AopSdk.php html' target='_blank'>class Alipay * 应用ID const APPID = 你的应用ID  *请填写开发者私钥去头去尾去回车,一行字符串 const RSA_PRIVATE_KEY = 应用对应开发者私钥  *请填写支付宝公钥,一行字符串 const ALIPAY_RSA_PUBLIC_KEY = 支付宝提供的公钥  * 支付宝服务器主动通知商户服务器里指定的页面 * @var string private $callback = http://www.test.com/notify/alipay_notify.php  *生成APP支付订单信息 * @param string $orderId 商品订单ID * @param string $subject 支付商品的标题 * @param string $body 支付商品描述 * @param float $pre_price 商品总支付金额 * @param int $expire 支付交易时间 * @return bool|string 返回支付宝签名后订单信息,否则返回false public function unifiedorder($orderId, $subject,$body,$pre_price,$expire){ try{ $aop = new /AopClient(); $aop- gatewayUrl = http://openapi.alipay.com/gateway.do  $aop- appId = self::APPID; $aop- rsaPrivateKey = self::RSA_PRIVATE_KEY; $aop- format = json  $aop- charset = UTF-8  $aop- signType = RSA2  $aop- alipayrsaPublicKey = self::ALIPAY_RSA_PUBLIC_KEY; //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay $request = new /AlipayTradeAppPayRequest(); //SDK已经封装掉了公共参数,这里只需要传入业务参数 $bizcontent = {/ body/ :/ {$body}/ , //支付商品描述 . / subject/ :/ {$subject}/ , //支付商品的标题 . / out_trade_no/ :/ {$orderId}/ , //商户网站唯一订单号 . / timeout_express/ :/ {$expire}m/ , //该笔订单允许的最晚付款时间,逾期将关闭交易 . / total_amount/ :/ {$pre_price}/ , //订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000] . / product_code/ :/ QUICK_MSECURITY_PAY/  . }  $request- setNotifyUrl($this- callback); $request- setBizContent($bizcontent); //这里和普通的接口调用不同,使用的是sdkExecute $response = $aop- sdkExecute($request); //htmlspecialchars是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题 return htmlspecialchars($response);//就是orderString 可以直接给客户端请求,无需再做处理。 }catch (/Exception $e){ return false;}

4.2、支付宝支付成功之后异步回调处理

 ?php * alipay_notify.php. * User: lvfk * Date: 2017/10/26 0026 * Time: 13:48 * Desc: 支付宝支付成功异步通知include_once (__DIR__. /../alipay-sdk-PHP-20171023143822/AopSdk.php //验证签名$aop = new /AopClient();$aop- alipayrsaPublicKey = /Comm/Pay/Alipay::ALIPAY_RSA_PUBLIC_KEY;$flag = $aop- rsaCheckV1($_POST, NULL, RSA2 if($flag){ //处理业务,并从$_POST中提取需要的参数内容 if($_POST[ trade_status ] == TRADE_SUCCESS  || $_POST[ trade_status ] == TRADE_FINISHED ){//处理交易完成或者支付成功的通知 //获取订单号 $orderId = $_POST[ out_trade_no  //交易号 $trade_no = $_POST[ trade_no  //订单支付时间 $gmt_payment = $_POST[ gmt_payment  //转换为时间戳 $gtime = strtotime($gmt_payment); //此处编写回调处理逻辑 //处理成功一定要返回 success 这7个字符组成的字符串, //die( success //响应success表示业务处理成功,告知支付宝无需在异步通知}

五、遇到的问题

5.1、一直报错40001= isv.invalid-signature

为了搞清楚原因,先后多次重新生成应用的RSA2公私密钥,发现都没有作用。最后结合网上资料,才发现,原来是支付宝回调地址notifyUrl不能有 ? 以及 ?后面加参数

5.2、支付宝异步通知成功了,但是$_POST为空

这个也花费了一点时间查找,开始做的时候就是遵照支付宝的建议使用HTTS方式请求。但这样应用后台一直通知没有参数内容。最后才想起来由于我们的应用使用了HTTS双向认证,这个原因导致支付宝的服务器回调的参数为空。最后,把回调地址改为了HTTP方式,验证通过

通过遇到的问题,首先查看支付宝的文档描述以及支付宝提供的错误码解释,实在不行就百度或者谷歌,再加上自己不断测试验证,最终一定可以解决问题

至此,支付宝APP支付这块功能完成,其他的APP退款、对账单等等功能就没继续做,不过按照支付宝网址文档以及支付宝提供的SDK,集成到自己应用也只是时间问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP !

相关推荐:

PDO预处理语句PDOStatement对象

PHP全功能无变形图片裁剪的操作类与用法的介绍

以上就是php 服务端集成支付宝APP支付的方法的详细内容,PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表