新版支付宝手机网站支付接口alipay.trade.wap.pay同步回调已经不返回交易状态trade_status,同步的不返回状态感觉不能写数据库操作了,同步回调只能作跳转用吗?看过其他大神的例子以前的旧版接口alipay.wap.direct异步和同步回调里面因为有交易状态(交易成功,失败等)返回。在写的逻辑基本可以一模一样,两者都是判断完trade_status是否等于TRADE_SUCCESS,因为同步异步不知道谁的速度返回快,两者都是先查询订单状态是否已经更改为付款状态,是的就不作数据库操作,否就进行更改状态等一系列数据库操作。而且旧版的return_url是叫同步通知,新版的return_url叫前台回跳,难道改版是为了return_url只作跳转用吗,数据库就由notify_url来处理,这样理解对不对?return_url里面应该怎么写?旧版支付接口:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.o73CpK&treeId=60&articleId=104790&docType=1#s2
新版支付接口:https://doc.open.alipay.com/doc2/detail.htm?treeId=203&articleId=105463&docType=1#s3
新版支付接口:https://doc.open.alipay.com/doc2/detail.htm?treeId=203&articleId=105463&docType=1#s3
解决方案 »
- 实在是很无奈,特来发帖求问。题:php使用ado访问access数据库?
- 用php计算一年中或者一段日期之内每个星期六的日期?
- 怎么终止整个循环,但是执行完当前循环后面的语句?
- 用snoopy.class.php采集内容被禁止的问题
- 如何实现点击网页中的提交按钮后在当前页面内显示php里的内容?
- 有关文件目录的问题
- 菜鸟急问大虾:
- [求助]关于正则表达式,HTML转换成UBB之类
- linux下的php如何连接windows下的sql server呢?
- 怎样把网站的管理页面放在另一个文件夹里,让网络上的用户看不到该文件夹呢?
- Apache 启用 Include conf/extra/httpd-ssl.conf 后 无法启动服务
- PHP-Barcode 生成条形码 下面文字怎么隐藏或去掉
新版接口return_url接收的参数,已经没有trade_status返回了:
[total_amount] => 50.00
[timestamp] => 2017-01-23 10:28:11
[sign] => ehp6Yvislw7ga7fh8fUwybiNtwiJ+xOAn+io58bUhww2qY8sYIKad6Te0CDOhkP2PEGBukJklTBhoS5/9IUwNGFeysUbb2Nk/RqVGVO9+LpJczGJ84npfk4UTDqbNpywaWcWdMtb1nli0IxwQkWNd41UpkKLS+I1xq9HwBWGyqA=
[trade_no] => 2017012321001004480200233814
[sign_type] => RSA
[auth_app_id] => 2016073100135245
[charset] => UTF-8
[seller_id] => 2088102169336823
[method] => alipay.trade.wap.pay.return
[app_id] => 2016073100135245
[out_trade_no] => 20170123102709751737
[version] => 1.0
return_url你可以跳转到判断是否支付成功的页面。
对的,就是这个意思。
只有支付宝通过你定义的接口notify_url返回的才不需要再请求多次api获取状态。
同步跳转回来的,都需要调用接口判断状态是否支付成功,这样比较安全。
调用接口同步的
Dictionary<string, string> sArray = GetRequestGet();
if (sArray.Count != 0)
{
bool flag = AlipaySignature.RSACheckV1(sArray, config.alipay_public_key, config.charset, config.sign_type, false);
if (flag)
{
Response.Write("同步验证通过");
}
else
{
Response.Write("同步验证失败");
}
} public Dictionary<string, string> GetRequestGet()
{
int i = 0;
Dictionary<string, string> sArray = new Dictionary<string, string>();
NameValueCollection coll;
//coll = Request.Form;
coll = Request.QueryString;
String[] requestItem = coll.AllKeys;
for (i = 0; i < requestItem.Length; i++)
{
sArray.Add(requestItem[i], Request.QueryString[requestItem[i]]);
}
return sArray; }
异步的
//Dictionary<string, string> sArray = GetRequestPost();
//if (sArray.Count != 0)
//{
// bool flag = AlipaySignature.RSACheckV1(sArray, config.alipay_public_key, config.charset, config.sign_type, false);
// if (flag)
// {
// //交易状态
// //判断该笔订单是否在商户网站中已经做过处理
// //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
// //请务必判断请求时的total_amount与通知时获取的total_fee为一致的
// //如果有做过处理,不执行商户的业务程序 // //注意:
// //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
// string trade_status = Request.Form["trade_status"]; // Response.Write("success");
// }
// else
// {
// Response.Write("fail");
// }
//}
public Dictionary<string, string> GetRequestPost()
{
int i = 0;
Dictionary<string, string> sArray = new Dictionary<string, string>();
NameValueCollection coll;
//coll = Request.Form;
coll = Request.Form;
String[] requestItem = coll.AllKeys;
for (i = 0; i < requestItem.Length; i++)
{
sArray.Add(requestItem[i], Request.Form[requestItem[i]]);
}
return sArray; }