PHP

由於商家傳入的H5交易參數有誤,該筆交易暫時無法完成,請聯系商家解決

字號+ 編輯: 种花家 修訂: 小红帽 來源: 闻课 2023-09-11 我要說兩句(0)

一個老項目, 微信支付模塊, 跑著跑著, 崩了, 到微信支付界面那一環節, 顯示報錯, 怎麽回事?

鄙人用的是php的H5支付模式, 需要将交易类型改为MWEB, 之前玩的好好的, 现在出问题了。腾讯官方文档上,只说你有误, 也不告诉你为啥有误。逼着你细细品他们那屎糊的文档,大佬说的大意是, 这回又又又又又变了, 不许你传127.0.0.1这种本地虚拟ip了, 让你来个真的客户端ip。文档地址 https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_5

说一千到一万, 玩法改了, 以前调试的路子跑不通了, 笔者费了半天劲, 用了以下代码来搞:

$notify = new NativePay();
$input = new WxPayUnifiedOrder();
$input->SetBody("test");
$input->SetAttach("test");
// 不能像以前一样虚拟一个ip出来, 必须写真实ip, 不然bug
$input->SetSpbill_create_ip(getRealIp());
$input->SetOut_trade_no("sdkphp123456789" . date("YmdHis"));
$input->SetTotal_fee("1");
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$input->SetNotify_url(" 
$input->SetTrade_type("MWEB");
$input->SetProduct_id("123456789");
$weixinpay_result = $notify->GetPayUrl($input);

打出来这个weixinpay_result变量, 统统都是好的。

wxpay-h5-failed.jpg

并不给面子, 报错。笔者项目中引用的getRealIp()函数长这样:

/**
 * 读取真实IP方法
 */
function getRealIp(){
    if ((bool) filter_var(_header('remote_addr'),FILTER_VALIDATE_IP,FILTER_FLAG_IPV4 |FILTER_FLAG_NO_PRIV_RANGE |FILTER_FLAG_NO_RES_RANGE)) {
        return _header('remote_addr');
    }
    return false;
}

平时100%能获取到用户ip, 断点也打了,获取的就是我的本机外网出口ip。

但是仍然不行,无论如何都是报一样的错。

解决方案: 查phpsdk库

回头看了一下phpsdk的库, 发现WxPay.Api.php里有这一行代码

// --------------坑--------------
$inputObj->SetSpbill_create_ip($_SERVER['REMOTE_ADDR']); //终端ip

哦, 原来是这样, 这是哪个控制欲强的大佬写的代码, 他们为什么不在sdk的demo里写, 而是藏在库里? 他们不知道现在已经不流行php-fpm模式了嘛, 赶快把这行注释掉!

结果, 果然跑通了。

閲完此文,您的感想如何?
  • 有用

    0

  • 沒用

    0

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: PHP+JS聊天群

相關課文
  • mac開發接入微信公衆號接口返回報錯 cURL error 56: SSLRead() return error -9806

  • PHP的換行符是什麽

  • pecl安裝程序時報錯Array and string offset access syntax with curly braces is no longer supported

  • 阿裡雲控制台報dedecms注入漏洞 路逕xxx/plus/search.php

我要說說
網上賓友點評