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

  • pecl安装程序时报错Array and string offset access syntax with curly braces is no longer supported

  • PHP的换行符是什么

我要说说
网上宾友点评
沙发已空