可以成功付款,回调的域名已备案,外网可以访问,外网也可以访问该控制类,与网络波动无关,是HTTPS并做了强制HTTPS处理,ssl证书和域名皆没有过期,url没有携带参数没有另外拼接端口,用的是v2接口,APIv2密钥已设置且无误,防火墙的80端口与443端口皆开放且没有做ip限制,无域名转发,依然无法在回调收到xml数据,刚刚再排查了一下应该是没有收到回调,但是定位半天还是没定位到实际问题
微信支付回调问题不久前做过一次微信支付的业务,从发起下单到回调获取支付结果整个流程都是正常的,最近又做了一个新的小程序,但是微信支付商户是同一个,只是换了个服务器和换了个小程序appid,除了更改了appid和回调url之外,代码完全一致(同样的业务)。付款是没有问题的,但是在新的服务器上回调出现了问题,可以调用回调url但是获取不到xml,而是获取到了一个很莫名其妙的数组,这个数组中的/PayNotifyTakeOut是我回调url的控制类名,它很神奇的帮我把前面的域名去掉了然后返回给我,这个是接受微信post的结果,原本这应该是个xml格式的数据: ["s" => "/PayNotifyTakeOut"] 但是以前的那个小程序就是正常的可以成功回调,可以成功拿到xml,可是不论是预支付阶段还是回调接口我都没有做过修改,为什么会区别的这么离谱?? <xml><appid><![CDATA[wxf73******d93]]></appid> <bank_type><![CDATA[OTHERS]]></bank_type> <cash_fee><![CDATA[1]]></cash_fee> <fee_type><![CDATA[CNY]]></fee_type> <is_subscribe><![CDATA[N]]></is_subscribe> <mch_id><![CDATA[162*****99]]></mch_id> <nonce_str><![CDATA[uxbgY7gSu0qi57SFZoAtennokYpBv6]]></nonce_str> <openid><![CDATA[oqkFU5EM******c4tlRF9aOks]]></openid> <out_trade_no><![CDATA[1666855134]]></out_trade_no> <result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code> <sign><![CDATA[641E47A43B****BF1A718F8C07456]]></sign> <time_end><![CDATA[20221027151900]]></time_end> <total_fee>1</total_fee> <trade_type><![CDATA[JSAPI]]></trade_type> <transaction_id><![CDATA[42000015******0270448192537]]></transaction_id> </xml> 刚开始我是认为自己修改appid啥的时候可能不小心改到了些啥,但是我认真的拿着原来的代码重新修改了两次还是一样不行,并且debug时仔细看了预支付的过程是实在的没有问题,预支付里拼装的xml是正确的,有问题应该也调起不了支付 接收post数据的函数: public function post_data() { $receipt = $_REQUEST; if ($receipt == null) { $receipt = file_get_contents("php://input"); if ($receipt == null) { $receipt = $GLOBALS['HTTP_RAW_POST_DATA'] ?? file_get_contents("php://input"); } } return $receipt; } 回调接口接收post数据并处理的代码: libxml_disable_entity_loader(true); $postStr = $this->post_data();//接收post数据 在这就出问题了,接收到的不是xml下面走不下去 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $arr = $this->object_toarray($postObj);//对象转成数组 ksort($arr);// 对数据进行排序 $str = $this->params_tourl($arr);//对数据拼接成字符串 $user_sign = strtoupper(md5($str)); 十分不解,求大佬帮忙看看
2022-10-27