5

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

我已经成功地为我的手机用户(通过在可怕的支付宝 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了返回给手机用户的字符串,这表明支付成功(通过检查支付宝的钱包历史,我们确实看到我们已经支付了)

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 URL payment/alipay/callback,我知道它正在工作,因为我正在接收请求,因此排除了我的callbackURL 是否正常工作。

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

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

4

1 回答 1

2

好的,所以我刚打完支付宝的支持电话。

我们验证他们确实向我发送了请求notify_url,但是我的通知类中有一个 PHP 重定向代码片段,所以它只是被重定向到我的登录页面(他们的结果输出是我的主页的 HTML 代码)。

所以吸取了教训:

  1. 不要将重定向放入notify_url

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

我还实现了他们的 Notify 类(负责处理返回参数)的讨厌的意大利面条代码。代码不是很漂亮,缩进都不对,评论都是中文的。。不过好像能用。所以我们会先发布它,然后重构 && 稍后翻译..

于 2014-11-25T04:43:09.473 回答