Closed FFCZ closed 5 years ago
https://github.com/yansongda/pay/blob/master/src/Gateways/Wechat.php#L186
退款验证并不会请求微信 API,您确定这个报错是退款引起的?
https://github.com/yansongda/pay/blob/master/src/Gateways/Wechat.php#L186
退款并不会请求微信 API,您确定这个报错是退款引起的?
可以在微信商户平台定义一个url,当退款完成的时候,微信服务器会主动请求这个url,通知退款结果。难道 $result = $Payer->verify(null, true); 这个不能用于这个场景??
谢谢回复
我的意思是,SDK 中的 $wechat->verify(null, true)
并不会主动请求微信的 API,但是您的错误 Wechat Business Error: ORDERPAID - order paid
显然是请求微信 API 后造成的一个错误,所以
您确定这个报错是退款验证引起的?
这个是我的代码截图,箭头指示的代码还可以捕抓到,但到了后面就返回 ORDERPAID 错误了。 try部分都是DB方面的更新操作,没有再请求微信的api了。
问题解决了。原来是我的一个钩子,触发了 sdk 的 close 方法,可能觉得已支付的订单不能关闭,就抛出错误,感觉close这个地方可以再优雅一点处理。 再次谢谢作者的劳动
好的,感谢支持
包版本号
v2.8.4
问题描述
响应微信服务端退款通知时,返回以下错误 ERROR_GATEWAY: ERROR_BUSINESS: Wechat Business Error: ORDERPAID - order paid yansongda/pay/src/Gateways/Wechat/Support.php line:418 code:6
你的代码
//引用对象 $Payer = Pay::wechat($config); $result = $Payer->verify(null, true); //记录请求 sys_logs(json_encode($result, JSON_UNESCAPED_UNICODE)); //退款成功 if (isset($result->return_code) && $result->return_code == 'SUCCESS' && isset($result->refund_status) && $result->refund_status == 'SUCCESS') { //业务逻辑 try { sys_logs('执行到这里就出错'); //入库处理,记录退款情况 //code ... } catch (Exception $e) { //code ... } return $Payer->success()->send(); }
报错详情
Gateways/Wechat/Support.php 的418行,是在判断result_code,响应退款根本没有这个变量,只有一个refund_status。sdk的日志是 ORDERPAID ,应该不是这个支付接口返回的内容??? 微信文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_16&index=10
sdk 日志
ERROR_GATEWAY: ERROR_BUSINESS: Wechat Business Error: ORDERPAID - order paid
nginx/apache 日志
谢谢作者的劳动,祝工作顺利,家庭幸福,中秋快乐