首页 > 技术分享 > 原生PHP
收藏

PHP实现支付宝APP支付,支付宝支付SDK常见问题

08/19 11:23
大潇博客 原创文章,转载请标明出处

支付宝对各种支付场景,都提供了SDK,供开发者参考和使用,而且官方也说明,他们的demo可在线上直接使用,由此看,大部分场景接入支付宝支付都相对较为简单。


在微信支付中,官方仅提供jsapi支付的sdk,改动配置即可使用,其它支付场景需要开发者自己处理,例如生成签名,转义数据等。


虽然支付宝提供了较为全面的sdk和文档,但仔细阅读文档,调试sdk等仍需一些时间。

而且在支付宝文档中,官方的说明,总有些位置出现更新不及时,说明不详细等问题,增加使用的难度。


举个例子说明,先看下图:

支付宝支付.png


上面的图片中,红框内的代码为支付宝在线调试工具所提供,工具比较正式,但代码放到项目中依旧不能使用,且APP支付场景下,在PHP中并不提示错误,有问题也不能及时查看原因,且参数有误时,依旧能生成签名,但在前端调用接口时,会出现类似如下这样的错误(安卓提供)。

支付宝安卓错误.png

支付宝有两种公钥,一个私钥,填写配置时容易错乱,出现6001这个错误码,网上查询结果大多说是公钥的问题,但调整公钥还是问题依旧,最后调整字段,删除一些非必要的参数,功能恢复正常,而这些参数,均为官方提供。


还有一点,支付接口的代码,在支付宝sdk、在线调试工具等不同位置,提供的代码也不同,官方说法参差不齐,增加了开发者的工作量。


需要注意的是,使用秘钥支付时,公钥为“支付宝公钥”,不是应用公钥。


下面为支付demo

$request_info_par=array(); //假设此数组包含用户支付的订单信息

require_once 'AopClient.php';

require_once 'AopCertClient.php';

require_once 'AopCertification.php';

require_once 'AlipayConfig.php';

require_once 'request/AlipayTradeAppPayRequest.php';

$privateKey = "应用私钥"; //填写应用私钥

$alipayPublicKey = "支付宝公钥"; //填写支付宝公钥

$alipayConfig = new AlipayConfig();

$alipayConfig->setServerUrl("https://openapi.alipay.com/gateway.do");  //支付网关

$alipayConfig->setAppId("合作身份者id"); //填写appid

$alipayConfig->setPrivateKey($privateKey);

$alipayConfig->setFormat("json");

$alipayConfig->setAlipayPublicKey($alipayPublicKey);

$alipayConfig->setSignType("RSA2");

$alipayClient = new AopClient($alipayConfig);

$request = new AlipayTradeAppPayRequest();

$request->setBizContent("{".

"\"out_trade_no\":\"".$request_info_par['out_trade_no']."\",". //商户订单号。 由商家自定义,64个字符以内,仅支持字母、数字、下划线且需保证在商户端不重复。

"\"total_amount\":\"".$request_info_par['total_fee']."\",".  //订单总金额。 单位为元,精确到小数点后两位,取值范围:[0.01,100000000] 。

"\"subject\":\"".$request_info_par['subject']."\",".  //订单标题。 注意:不可使用特殊字符,如 /,=,& 等。

"\"body\":\"".$request_info_par['body']."\",".  //订单附加信息。 如果请求时传递了该参数,将在异步通知、对账单中原样返回,同时会在商户和用户的pc账单详情中作为交易描述展示

"\"goods_type\":\"0\",".  //商户订单号。 由商家自定义,64个字符以内,仅支持字母、数字、下划线且需保证在商户端不重复。

"}");

$request->setNotifyUrl("http://xxx.xxx.com/zhifubao/notify/recharge/"); //支付成功后的回调地址,用户自定义,只能为静态地址

$request_str = $alipayClient->sdkExecute($request); //若参数均正常,生成的签名无误,ios和安卓使用这里返回的字符串,即可拉起支付宝收银台


回调参数,仅作参考,签名等重要参数已做修改

支付宝回调参数.png


官方SDK下载地址:https://opendocs.alipay.com/open/54/106370

异步通知(回调)文档:https://opendocs.alipay.com/open/204/105301


demo参考,使用电脑浏览器下载


下载地址:alipay-sdk-php-all-master

打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311