由於商家傳入的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.交流群: 2702237 13835667

相關課文
  • 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

我要說說
網上賓友點評