收藏
回答

微信支付回调问题

不久前做过一次微信支付的业务,从发起下单到回调获取支付结果整个流程都是正常的,最近又做了一个新的小程序,但是微信支付商户是同一个,只是换了个服务器和换了个小程序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)); 


十分不解,求大佬帮忙看看

回答关注问题邀请回答
收藏

1 个回答

  • 天赋给不了你闪电般的荷包蛋
    天赋给不了你闪电般的荷包蛋
    2022-10-27

    可以成功付款,回调的域名已备案,外网可以访问,外网也可以访问该控制类,与网络波动无关,是HTTPS并做了强制HTTPS处理,ssl证书和域名皆没有过期,url没有携带参数没有另外拼接端口,用的是v2接口,APIv2密钥已设置且无误,防火墙的80端口与443端口皆开放且没有做ip限制,无域名转发,依然无法在回调收到xml数据,刚刚再排查了一下应该是没有收到回调,但是定位半天还是没定位到实际问题

    2022-10-27
    有用
    回复 1
    • 天赋给不了你闪电般的荷包蛋
      天赋给不了你闪电般的荷包蛋
      2022-10-28
      已解决,接收函数不要用$_REQUEST,需要用$_POST,尽管在旧服务器上不知道为什么用$_REQUEST也没事,但是这里应该用$_POST
      2022-10-28
      回复
登录 后发表内容