在服务器端接收支付宝移动支付的请求字符串

时间:2014-11-25 02:26:42

标签: php alipay

我不完全确定这个问题有多受欢迎或是否会得到任何回复,因为这个问题与中国开发人员的关系比那些开发人员更多,但是,我目前正致力于为支付宝集成服务器端脚本接收移动成功请求字符串。

我已经成功地为我的移动人员(通过在可怕的支付宝API中眯着眼睛)提供他们向支付宝付款所需的字符串。它遵循这种格式[可以识别的可识别信息]:

_input_charset=\"utf-8\"&body=\"Order Number: 20141121_80\"&it_b_pay=\"30m\"&notify_url=\"http://somePublicFacingIP:8080/index.php?route=payment/alipay/callback\"&out_trade_no=\"80\"&partner=\"2088611100000000\"&payment_type=\"1\"&seller_id=\"account@website.com\"&service=\"mobile.securitypay.pay\"&subject=\"Order Number: 20141121_80\"&total_fee=\"10.01\"

以上字符串由Android / iOS API在其支付宝支付类中使用,然后由私钥签名,然后发送给支付宝。在支付宝收到他们的请求后,他们将验证我们的参数字符串,并发回状态代码,范围从6000 - 9000.

到目前为止,我们已收到返回给移动人员的字符串中的resultStatus=9000,表示付款成功(通过查看支付宝的钱包历史记录,我们确实看到我们已付款)< / p>

result = {
    memo = "";
    result = "_input_charset=\"utf-8\"&body=\"\U4ea4\U6613\U53f7 20141124_80\"&it_b_pay=\"30m\"&notify_url=\"http://publicFacingIP:8080/index.php?route=payment/alipay/callback\"&out_trade_no=\"80\"&partner=\"208861100000000\"&payment_type=\"1\"&seller_id=\"account@website.com\"&service=\"mobile.securitypay.pay\"&subject=\"\U65b0\U5143\U7d20\U7f51\U4e0a\U70b9\U9910 - \U8ba2\U5355\U7f16\U53f7 20141124_87\"&total_fee=\"0.01\"&success=\"true\"&sign_type=\"RSA\"&sign=\"reallyLongSignedString\"";
    resultStatus = 9000;
}

以下是一切都停止工作的地方:

支付宝理论上应该发送一个结果字符串(参数比上面显示的更多)也发送到我们在输入参数中指定的notify_url,我们的服务器需要验证的是支付宝。此结果字符串也将用于更新我们的后端,以便我们知道订单确实成功。

由于某些原因,支付宝根本没有将结果字符串发送到我们指定的notify_url

我尝试了什么:

  1. var_dump()个POST输入放到payment/alipay/callback。没有收到任何请求。

  2. 我已经尝试过面向我公开的IP网址payment/alipay/callback,我知道它正在运行,因为我收到请求,因此排除我的callback网址是否正常运作或不

  3. 拔掉我的头发。我测试再次付款,我可以确认拉出我的头发并没有解决问题。

  4. 正如中国开发商经常说的,那里有没有“大神”(或大师)可以给我一些建议和/或解决方案?

1 个答案:

答案 0 :(得分:1)

好吧,所以我刚刚用支付宝下了支持电话。

我们确认他们确实已将请求发送到我的notify_url,但我的通知类中有一个PHP重定向代码段,因此它只是被重定向到我的目标网页(结果的输出是我的主要内容)页面的HTML代码)。

所以吸取了教训:

  1. 请勿将重定向放入notify_url

  2. 联系支付宝支持 - 他们可以提供比您想象的更多的帮助(好吧。比我想的还要少,但他们仍然有所帮助)。

  3. 我还实现了他们的Notify类的讨厌的意大利面条代码(负责处理返回参数)。代码不是很漂亮,缩进都是不正确的,评论都是中文的..但似乎它会起作用。所以我们先发货然后重构&amp;&amp;稍后翻译..