php获取prepay_id时报错,微信支付获取prepay_id返回签名错误,官方demo中的签名方法MD5验证有问题...
引用官方V3微信支付PHP版的demo做的改動,在獲取prepay_id發現總是返回簽名錯誤,經與騰訊官方的“微信公眾平臺支付接口調試工具”對比發現MD5不一樣,找到demo中代碼有問題部分:
function formatBizQueryParaMap($paraMap, $urlencode)
{
$buff = "";
ksort($paraMap);
foreach ($paraMap as $k => $v)
{
if($urlencode)
{
$v = urlencode($v);
}
//$buff .= strtolower($k) . "=" . $v . "&";
$buff .= $k . "=" . $v . "&";
}
$reqPar;
if (strlen($buff) > 0)
{
$reqPar = substr($buff, 0, strlen($buff)-1);
}
return $reqPar;
}
$buff .= $k . "=" . $v . "&";在用&進行參數的字符串拼接的時候 &notify_url變成了-ify_url,網上查找是¬的編碼問題,在傳遞的時候不影響,只是輸出會有問題,請問這里到底會不會影響MD5的生成?如果影響要怎么改呢?
回復內容:
引用官方V3微信支付PHP版的demo做的改動,在獲取prepay_id發現總是返回簽名錯誤,經與騰訊官方的“微信公眾平臺支付接口調試工具”對比發現MD5不一樣,找到demo中代碼有問題部分:
function formatBizQueryParaMap($paraMap, $urlencode)
{
$buff = "";
ksort($paraMap);
foreach ($paraMap as $k => $v)
{
if($urlencode)
{
$v = urlencode($v);
}
//$buff .= strtolower($k) . "=" . $v . "&";
$buff .= $k . "=" . $v . "&";
}
$reqPar;
if (strlen($buff) > 0)
{
$reqPar = substr($buff, 0, strlen($buff)-1);
}
return $reqPar;
}
$buff .= $k . "=" . $v . "&";在用&進行參數的字符串拼接的時候 &notify_url變成了-ify_url,網上查找是¬的編碼問題,在傳遞的時候不影響,只是輸出會有問題,請問這里到底會不會影響MD5的生成?如果影響要怎么改呢?
問題已解決,我說一下主要遇到的情況吧:
1.獲取prepay_id返回簽名錯誤是因為我用的商戶密匙不對,開始以為是騰訊返回的郵件中那個6位數的,正確的應該是要自己設置一個32位的支付密匙。這里的說的問題在頁面上調試的時候顯示¬確實會出問題,但是在后臺里面沒有影響,不用管它。
2.獲取prepay_id后,發起支付一度出現system:access_denied,檢查各項配置都沒錯,按照開發文檔說的公眾號配置的支付目錄也沒錯,后來沒轍了,就把所有目錄都配到了支付目錄中,一下子成功了!騰訊巨坑,文檔上說只要配“發起支付請求的目錄”,我是把相關支付代碼用到的目錄都配了才可以。
3.PHP版的DEMO中有幾個小BUG,一個是有一處不要轉換大小寫,還有幾個忘記在哪了,大家仔細看下代碼吧。
再次表示,騰訊大坑,給的DMEO有BUG不說,文檔寫的又簡略,很多要注意的問題都沒寫,也沒說清楚,還望各路高手慎行,莫掉坑中!
我也遇到了同樣的問題, 求解答啊
那個問題不用管,是正常的前臺顯示 后臺php會把¬ 轉成¬ 關于調用jsapi時可以在state后帶入你想要傳入的參數,近期會寫一個微信商戶調起H5支付的開發流程文章,歡迎關注我
$buff .= strtolower($k) . "=" . $v . "&";
這里沒有問題 檢測下你輸出的代碼
本條技術文章來源于互聯網,如果無意侵犯您的權益請點擊此處反饋版權投訴
本文系統來源:php中文網
總結
以上是生活随笔為你收集整理的php获取prepay_id时报错,微信支付获取prepay_id返回签名错误,官方demo中的签名方法MD5验证有问题...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flash 计时器
- 下一篇: 架构之美–开放环境下的网络架构