支付宝notify url.php,APP 接入支付宝支付,后端 notify_url 收不到支付宝主动通知的解决方法...

最近在做一个 iOS 应用的后端,做到了支付部分。

(后端用的是 PHP,如果你对这个感兴趣的话)

按支付宝文档的业务流程,

iOS 调支付宝的时候需要传入一个 notify_url

当交易状态发生变化时,支付宝服务器会主动通知 notify_url,

POST传递数据,JSON格式。

可能的坑1:主机提供商挡住了支付宝发来的请求

这里踩到了一个坑就是支付宝支付成功之后,notify_url 一直没收到支付宝的主动通知

后来发现是主机提供商(我们的测试服务器是"主机壳")的管理界面,

有个过滤 User-Agent 的设置。

如果 user-agent 是空就拦截什么的。不记得了。

把钩去掉就好了,

调了半天结果是因为服务商拦下了支付宝的请求,所以到不了我们的程序。

可能的坑2:notify_url 不要带参数

我们之前是 https://xxx/?m=api&c=alipay&a=notify_toho

后来改成 https://xxx/alipay.php

就好了

可能的坑3:证书路径问题

签名死活不对,老是

responseTxt=true

notify_url_log:isSign=false,discount=0.00&payment_type=1&subject=

注意 isSign = false

于是我决定调试下验证签名的地方,

function getHttpResponseGET($url,$cacert_url) {

$curl = curl_init($url);

curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头

curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);//SSL证书认证

curl_setopt($curl, CURLOPT_CAINFO,$cacert_url);//证书地址

$responseText = curl_exec($curl);

// var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容

logResult(curl_error($curl));

curl_close($curl);

return $responseText;

}

我在这里加了个 logResult(curl_error($curl));

发现输出 Problem with the SSL CA cert (path? access rights?)

网上给的解决方法都不管用

(什么重启服务器啊, 更新ca-certificates 包啊,都不行)

后来发现原来是:

$alipay_config['cacert'] = getcwd().'\\cacert.pem';

如果你在 windows 上测试,

echo file_get_contents($alipay_config['cacert']);

是可以的,

但是 linux 就不一样了。

echo file_get_contents($alipay_config['cacert']); 啥也没输出,说明路径不对。

改成如下就可以了

$alipay_config['cacert'] = getcwd().'/cacert.pem';

再次输出就没有 Problem with the SSL CA cert (path? access rights?) 这个问题了

所以说这个问题只要把 \ 改成 / 就行了 = =

可能的坑4:支付宝公钥换行

之前一直都是一行,

-----BEGIN PUBLIC KEY-----xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbzzzzzzzzzzzzzzzzzzzzzzzz-----END PUBLIC KEY-----

这里简书的格式好像有点问题,PUBLIC 两边太多空格了。

后来64个字符一行,如上文,就好了。。isSign=True

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

zzzzzzzzzzzzzzzzzzzzzzzz

-----END PUBLIC KEY-----```

真是无力吐槽

responseTxt=true

notify_url_log:isSign=true

现在两个都是 true。

问题解决。

后端现在不但能正常收到请求而且能正常处理了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值