支付宝即时到账接口没法回调及其解决过程

    前段时间公司在紧锣密鼓的筹备一项社区商务项目,既然作电商,支付接口就必不可少,下面咱们就看一下我在集成支付接口时所遇到的问题。html

    企业账号在申请即时到账支付接口后,即可下载官方的支付接口集成demo,我厂大部分项目都采用C#.net,故以C#集成支付接口。数组

  闲话少说,上代码,下面是支付宝接口的核心代码:异步

 1  //把请求参数打包成数组
 2             SortedDictionary<string, string> sParaTemp = new SortedDictionary<string, string>();
 3             sParaTemp.Add("partner", merchantPayInfo.Apartner);
 4             sParaTemp.Add("_input_charset", Config.Input_charset.ToLower());
 5             sParaTemp.Add("service", "create_direct_pay_by_user");
 6             sParaTemp.Add("payment_type", "1");
 7             sParaTemp.Add("notify_url", notify_url);
 8             sParaTemp.Add("return_url", return_url);
 9             sParaTemp.Add("seller_email", merchantPayInfo.SellerEmail);
10             sParaTemp.Add("out_trade_no", OrderNo);
11             sParaTemp.Add("subject", ProductName);
12             sParaTemp.Add("total_fee", OrderPrice);
13             sParaTemp.Add("body", "");
14             sParaTemp.Add("show_url", "");
15             sParaTemp.Add("anti_phishing_key", "");
16             sParaTemp.Add("exter_invoke_ip", "");
17             sParaTemp.Add("extend_param", "");
18 
19             var submit = new Submit(merchantPayInfo.Akey);
20             //创建请求
21             string sHtmlText = submit.BuildRequest(sParaTemp, "get", "确认");
22             Response.ContentType = "text/html";
23             Response.Write(sHtmlText);
24             Response.End();

 

其中必填的一些参数包括:订单号,订单价格。固然也要填写同步回调的url,异步回调的url,商品名称等,最后创建请求,咱们会跳转到以下页面:网站

 

那么,问题来了:支付成功后,咱们须要从支付宝的支付页面回调到咱们本身的系统,一般须要更新订单状态,计算销量等,可是,即时到账支付成功后却不能回调,这让咱们伤透脑筋。虽然支付接口有异步调用url,而且会在24小时内调用屡次,固然在前一次调用失败的状况下。ui

但同步回调必不可少,同步回调过程当中,支付接口会返回给咱们交易号,订单号等信息,这些记录都是有用处的。在后续的退款接口集成中,这些数据必不可少。url

为了解决这个问题,笔者联系了采用了多种方案,最后将同步回调的url改成任意一个众所周知的网站,好比http://www.baidu.com/。结果惊喜的发现,支付接口成功回调了!并在百度的url中附带了咱们须要的交易号等数据。spa

这时咱们能发现:同步回调失败,并非支付接口出现了异常,而是咱们的同步回调url有问题。这里笔者仍发现了一个奇怪的现象:若是用手机扫码支付,那么支付成功后是可以顺利回调的,而输入账号支付,却回调失败。因此笔者未曾怀疑是同步回调的url有异常。.net

后来咨询了支付宝接口的客服,了解到:手机扫码支付和账号支付,回调采用的重定向机制是不一样的,自此,内心的一块小石头落地。code

那么账号支付后,如何才能正常回调呢?原来是个人本地站点,用的是主机名+端口号的组合,支付接口回调不能找到对应的回调url,即认为该url不合法。因此建议你们使用ip地址来绑定本地站点。固然,对于已经上线的项目,域名可以顺利解析,也就不会有这种问题了。htm

自此,问题解决!

项目中还遇到支付宝退款接口没法同步回调等问题,笔者就不在此文中赘述,你们可在留言中一块儿交流讨论。

相关文章
相关标签/搜索