cordova支持php,基于 cordova & PHP SDK 的 App 支付宝支付实现

本文详细记录了在对接支付宝接口时遇到的异步回调验签失败的问题,以及如何解决。主要步骤包括检查并处理POST数据中的特殊字符,确保验签方式与下单时一致,核对私钥和支付宝公钥的准确性。同时,介绍了配置支付宝应用的基本流程,包括生成和上传密钥,设置回调URL等关键环节。最后,提供了服务端处理回调的代码示例,强调了回调成功后的业务逻辑处理和返回响应的重要性。
摘要由CSDN通过智能技术生成

着实被几个钥给恶心到了。

整个过程中,最蛋疼的是,可以支付成功,但是异步回调老是报错,验证不过去,不好意思,花了两天时间...先把这个解决办法说下吧。

function notify() {

$aop = new AopClient;

$aop->alipayrsaPublicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA70UfUntg80gXhzKby5opWNhzmIKDRLs78htUGRqtktbR8zGG7eqva0xV2MEtkqgoxuf26zymdK1oNCliX2dO+95r6pLb8zkVOH7eBKSt/TaL+YxVkPOFkuBLFeBI67Qj8eY63E1xdCgwGIEowTydpRhkbTCvCVXjQRlY9TqWOTEtQVScZj3lWgKg61A26608vs/WtsUD5Or/h/n0M7mZzEzNVyCu8xgQDHoW80kY1ovkuEGER0pj3QbGi4ECBmTlwQ/ZX/K9q7cnePB7Y4SJ6rww6TvT9AWdkzLVVd1NO9qhHqMBwtc5nYFW1qEK+ExeEOXnoRTFwtOjDH6JcRlZ4wIDAQAB';

// 下面这里是我处理后的方法 去掉回调拿到的值 三个反斜杠!!!

$data = $_POST;

$data['fund_bill_list'] = str_replace('\\', '', $data['fund_bill_list']);

//此处验签方式必须与下单时的签名方式一致

$flag = $aop->rsaCheckV1( $data, NULL, "RSA2" );

if ( $flag ) {

file_put_contents("lwlog.txt",date('Y-m-d H:i:s',time())."----111-----".json_encode( $data ).$flag."\n\r",FILE_APPEND);

file_put_contents("lwlog.txt",date('Y-m-d H:i:s',time())."----112-----".json_encode( $_POST ).$flag."\n\r",FILE_APPEND);

}else{

file_put_contents("lwlog.txt",date('Y-m-d H:i:s',time())."-----222----".json_encode( $data )."\n\r",FILE_APPEND);

file_put_contents("lwlog.txt",date('Y-m-d H:i:s',time())."-----223----".json_encode( $_POST ).$flag."\n\r",FILE_APPEND);

}

echo 'success';

die;

}

上面是对 $_POST 提了出来额外做了处理。

处理前

"fund_bill_list":"[{\\\"amount\":\\\"0.01\\\",\\\"fundChannel\\\":\\\"ALIPAYACCOUNT\\\"}]",

处理后

"fund_bill_list":"[{\"amount\":\"0.01\",\"fundChannel\":\"ALIPAYACCOUNT\"}]",

另外就是仔细比对的自己的私钥和支付宝公钥是否有误差。

开始接入

一 、 了解配置基本信息

基本操作

配置支付信息

生成密钥的链接打开后,就是下面的样子。这里以 windows 为例子。下载签名工具,很容易获取到自己的私钥 和公钥。这里注意的是,尽量都用 RSA2 的签名工具,以免后面带来麻烦.

065800b67bab

生成自己的密钥

065800b67bab

上传或者修改自己的密钥

配置后

065800b67bab

自己的应用信息

几个比较重要的,都被我用红圈圈了起来。可以看到截图下面有两个公钥,左边是你刚刚上传给支付宝的,右边是支付宝处理后的,我们所有的 PHP-SDK 代码里使用的公钥用的都是右边的!!!支付宝公钥官方释义

二 、 准备开发

服务端 & 客户端

贴下服务端代码

$aop = new \AopClient();

$aop->gatewayUrl = "https://openapi.alipay.com/gateway.do";

//实际上线app id需真实的

$aop->appId = "你的 appid ";

$aop->rsaPrivateKey = ' 你的私钥 ';

$aop->format = "json";

$aop->charset = "UTF-8";

$aop->signType = "RSA2";

$aop->alipayrsaPublicKey = ' 支付宝给你的公钥 ';

$bizcontent = json_encode([

'body'=>'GOODS',

'subject'=>'clothes',

'out_trade_no'=>$ord_num,//此订单号为商户唯一订单号

'total_amount'=> '0.01',//保留两位小数

'product_code'=>'QUICK_MSECURITY_PAY'

]);

//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay

$request1 = new \AlipayTradeAppPayRequest();

//支付宝回调

$request1->setNotifyUrl( "你的回调方法的 url " );

$request1->setBizContent( $bizcontent );

//这里和普通的接口调用不同,使用的是sdkExecute

$response = $aop->sdkExecute( $request1 );

return $response;

上面的回调地址对应的方法

function notify()

{

// require_once('/www/my/app/third_party/alipay/aop/AopClient.php');

$aop = new AopClient;

$aop->alipayrsaPublicKey = ' 支付宝给你的公钥 ';

//此处验签方式必须与下单时的签名方式一致

$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2");

if ( $flag ) {

// file_put_contents("log.txt", "This is another something.", FILE_APPEND);

// file_put_contents("log.txt", "This is another something12312313.");

file_put_contents("/tmp/log.txt",date('Y-m-d H:i:s',time())."---------".json_encode($_POST)."\n\r",FILE_APPEND);

}else{

file_put_contents("/tmp/log.txt",date('Y-m-d H:i:s',time())."-----222222----".json_encode($_POST)."\n\r",FILE_APPEND);

}

// var_dump( $flag );

//验签通过后再实现业务逻辑,比如修改订单表中的支付状态。

/**

①验签通过后核实如下参数trade_status、out_trade_no、total_amount、seller_id

②修改订单表

**/

//打印success,应答支付宝。必须保证本界面无错误。只打印了success,否则支付宝将重复请求回调地址。

echo 'success';

die;

}

总的来说,你手上会有三个钥,你的公钥的任务就是换到支付宝给你的公钥。随后的开发用的都是支付宝的公钥!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值