下面为大家分享一篇php 服务端集成支付宝APP支付实例,具有很好的参考价值,希望对大家有所帮助。
支付宝支付分为了很多种场景,这里只讲述支付宝APP支付功能集成,期间遇到了特别大的坑,因此我简单描述下集成过程,并概述遇到的问题及解决方案
由于公司业务简单,只支持支付宝支付,而无需关心退款,查询等等额外功能,因此该篇内容仅仅讲述支付宝支付接口时服务端如何准备APP拉取支付订单的信息,大概流程如下
一、创建应用及配置
首先,需要到蚂蚁金服开发平台(open.alipay.com)注册应用,并获取应用ID,并配置应用,这里在配置时主要是签约,生成应用的RSA2公私钥,同时获取到支付宝提供的支付公钥等,这部分官网后台都有提示,比较简单
二、下载对应SDK
这里我是在PHP后台集成服务,因此下载的是PHP SDK,地址:https://docs.open.alipay.com/54/103419/
三、准备一个可以访问的真实域名
四、案例
当以上三部完成之后,此时就可以进入配置我们自己的业务代码了
4.1、组织APP支付时的支付订单信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | <?php
require_once (__DIR__.'/alipay-sdk-PHP-20171023143822/AopSdk.php');
class Alipay
{
const APPID = '你的应用ID';
const RSA_PRIVATE_KEY = '应用对应开发者私钥';
const ALIPAY_RSA_PUBLIC_KEY = '支付宝提供的公钥';
private $callback = "http://www.test.com/notify/alipay_notify.php" ;
public function unifiedorder( $orderId , $subject , $body , $pre_price , $expire ){
try {
$aop = new \AopClient();
$aop ->gatewayUrl = "https://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;
$request = new \AlipayTradeAppPayRequest();
$bizcontent = "{\"body\":\"{$body}\","
. "\"subject\":\"{$subject}\","
. "\"out_trade_no\":\"{$orderId}\","
. "\"timeout_express\":\"{$expire}m\","
. "\"total_amount\":\"{$pre_price}\","
. "\"product_code\":\"QUICK_MSECURITY_PAY\""
. "}" ;
$request ->setNotifyUrl( $this ->callback);
$request ->setBizContent( $bizcontent );
$response = $aop ->sdkExecute( $request );
return htmlspecialchars( $response );
} catch (\Exception $e ){
return false;
}
}
}
|
登录后复制
4.2、支付宝支付成功之后异步回调处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?php
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 ){
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 );
}
}
|
登录后复制
五、遇到的问题
5.1、一直报错40001=>isv.invalid-signature
为了搞清楚原因,先后多次重新生成应用的RSA2公私密钥,发现都没有作用。最后结合网上资料,才发现,原来是支付宝回调地址notifyUrl不能有 '?' 以及 ?后面加参数
5.2、支付宝异步通知成功了,但是$_POST为空
这个也花费了一点时间查找,开始做的时候就是遵照支付宝的建议使用HTTS方式请求。但这样应用后台一直通知没有参数内容。最后才想起来由于我们的应用使用了HTTS双向认证,这个原因导致支付宝的服务器回调的参数为空。最后,把回调地址改为了HTTP方式,验证通过
通过遇到的问题,首先查看支付宝的文档描述以及支付宝提供的错误码解释,实在不行就百度或者谷歌,再加上自己不断测试验证,最终一定可以解决问题
至此,支付宝APP支付这块功能完成,其他的APP退款、对账单等等功能就没继续做,不过按照支付宝官网文档以及支付宝提供的SDK,集成到自己应用也只是时间问题。
以上就是本篇文章的全部内容了,感谢大家的阅读,更多内容请关注PHP中文网!
相关推荐:
thinkPHP交易详情查询功能
以上是php服务端集成支付宝APP支付的详细内容。更多信息请关注PHP中文网其他相关文章!