alipay-node-sdk
alipay-node-sdk copied to clipboard
支付成功后,不知道怎么调用验签来返回商户界面 希望得到答案
router.get('/return', function (req, res) { var lalala = ali.signVerify(req.query); if (lalala === false) { return res.error("回调签名验证未通过"); } //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)// var trade_no = req.query["trade_no"]; //支付宝交易号 var order_no = req.query["out_trade_no"]; //获取订单号 var total_amount = req.query["total_amount"]; //获取总金额
//var buyer_email = req.query.buyer_email; //买家支付宝账号
var trade_status = req.query["trade_status"]; //交易状态
if ( trade_status == "TRADE_SUCCESS") {
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//如果有做过处理,不执行商户的业务程序
handleRecharge(order_no, res);
}
res.end("success");
});
router.post('/notify', function (req, res) { var lalala = ali.signVerify(req.body); if (lalala === false) { return res.error("回调签名验证未通过"); } //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)// var trade_no = req.body["trade_no"]; //支付宝交易号 var order_no = req.body["out_trade_no"]; //获取订单号 var total_amount = req.body["total_amount"]; //获取总金额
//var buyer_email = req.query.buyer_email; //买家支付宝账号
var trade_status = req.body["trade_status"]; //交易状态
if (trade_status == "TRADE_SUCCESS") {
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//如果有做过处理,不执行商户的业务程序
handleRecharge(order_no, res);
}
res.end("success");
});
不是太明白你的意思,一般来说在客户端进行支付操作后应该进行一个支付结果验证过程,根据验证结果进行页面跳转就可以了。 验证过程包括:支付宝的签名验证、根据自身业务进行订单合法性验证(订单是否处理过、支付金额是否正确等等)
怎么调用sdk中的支付宝签名验证呢
支付成功后没有返回页面上 支付宝云排查显示http://www.gy4k.com/alipay/notify 接收参数的处理逻辑错误 我是新手 不知道要怎样去弄
ali.signVerify(req.body); 这个是对的,其中req.body是支付宝返回的支付结果报文解析后的对象
router.post('/notify', function (req, res) { var lalala = ali.signVerify(req.body); var order_no = req.body.out_trade_no; //获取订单号 var trade_status = req.body.trade_status; //交易状态 if (lalala) { if (trade_status == "TRADE_SUCCESS") { handleRecharge(order_no, res); } res.end("success"); } else { res.end("fail"); } }); 那这样代码有错吗 可以支付成功 就是页面没有返回
你这个应该是接收支付宝结果通过的地址,在这里面你要验签,并校验订单是否正确。如果说你这里逻辑错误的话,那你就要在这里排查一下,看是哪一步出的错
ali.signVerify(req.body);这个方法就是 签名校验么 返回true或者false的 是的话没有错呢 怎样可以查看到 req.body里的值 console.log(req.body());吗 可是显示在哪里
if(ali.signVerify(req.body)){ if(trade_status ==“TRADE_SUCCESS”){ handleRecharge(order_no,res); } res.end(“success”); } else { res.end(“fail”); }
你可以直接远程调试或者转成json字符串输出
为什么一直是 支付成功后 不return跳转呢
可以给个return的事例吗 代码感觉是没有问题的 支付宝成功后确不跳转
router.get('/return', function (req, res) { var lalala = ali.signVerify(req.params); if (lalala) { var trade_no = req.params.trade_no; //支付宝交易号 var order_no = req.params.out_trade_no; //获取订单号 var total_amount = req.params.total_amount; //获取总金额 //var buyer_email = req.query.buyer_email; //买家支付宝账号 var trade_status = req.params.trade_status; //交易状态 if (trade_status == "TRADE_SUCCESS") { handleRecharge(order_no, res); } res.end("success"); } else { res.end("fail"); }
});
这个页面是你给客户端使用的页面吧,如果是的话你要自己在这里控制是否跳转啊,你直接输出success自然是跳转不了的
这个原来是mapi的支付网关 现在改openapi 是不是着问题导致失败 需要注意什么吗
如果是网关的话这样是对的,那你就是跟踪一下看看返回的结果是不是对的,是不是返回了success给支付宝
商户响应时间: 2017-11-01 16:10:19 | 商户返回信息: 耗时耗时: 59ms, 地址: http://www.gy4k.com/alipay/notify, http状态码: 404, 返回: {"isSuccess":false,"msg":"Not Found"}. 支付宝的云排查 是这样提示的
这是 notify的代码 router.post('/notify', function (req, res) { var lalala = ali.signVerify(req.body); if (lalala) { var trade_no = req.body.trade_no; //支付宝交易号 var order_no = req.body.out_trade_no; //获取订单号 var total_amount = req.body.total_amount; //获取总金额
//var buyer_email = req.query.buyer_email; //买家支付宝账号
var trade_status = req.body.trade_status; //交易状态
if (trade_status == "TRADE_SUCCESS") {
handleRecharge(order_no, res);
}
res.send("success");
} else {
res.send("fail");
}
});
iisnode encountered an error when processing the request.
HRESULT: 0x6d HTTP status: 500 HTTP subStatus: 1013 HTTP reason: Internal Server Error
return 页面 在一分钟后会显示这个错误消息
测试的结果显示你只处理了get的路由,没有处理post
怎么没处理 post 呢
检测下你的路由处理逻辑是不是有问题,发的post请求返回的是 {"isSuccess":false,"msg":"Not Found"},而从你发的代码上来看你只会返回success或fail。只有两种情况,要么你的路由没有经过这里,要么你是handleRecharge(order_no, res);这一步里提前返回了结果给支付宝
如果是路由没有经过这里 需要怎么配置呢 恩人
你用的什么框架
express
我很少用express,已经记不清怎么设置了,如果你同时设置了get和post的路由,尝试把get的移除掉看看,支付宝不会用get给你通知
好的 谢谢你 谢谢你 我在看看
为什么 写的return_url地址 是直接redirect到那个地址上 没有执行return里的逻辑
return_url是给用户进行反馈的地址,你应该是支付宝通知中处理业务逻辑
支付宝异步通知 没有调用我的notify里的代码 怎么回事
你好 请问一下sdk 一切正常 为什么 发布Azure上时 会有 http 500的错误 我用的是express
错误堆栈发上来看看
不知道怎么看错误堆栈 哥 支付宝可以 又出现发布时 报错