先上代碼
//$params 是需要的參數
static public function getSign($params)
{
$arr = [];
//參數爲空不參與簽名
foreach ($params as $k => $v){
$arr[$k] = $v;
}
ksort($arr);
$stringA = urldecode(http_build_query($arr));
$stringSignTemp=$stringA."&key=".self::KEY;
//md5 簽名
$sign = strtoupper(md5($stringSignTemp));
return $sign;
}
如果報簽名錯誤
- 檢查參數是否齊全
- 簽名過程中是否進行了排序ksort
- 是否解碼urldecode
- 支付祕鑰是否正確
5.mmp 最後一個坑提醒大家一定要仔細看文檔一個一個的字母都不能錯,我錯誤的原因是統一下單的簽名appid 是小寫,到小程序簽名時 appId中的’I’大寫。
以下是官方給出的失敗原因
1)使用微信的在線簽名工具檢查簽名是否和程序生成的一致
https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1 簽名工具用谷歌打開。
選擇MD5,XML,然後把請求參數xml放進去,就能校驗簽名。
2)如果和微信的在線簽名工具一致,說明程序沒有錯誤,確定是API密鑰錯誤(被別人改動或者記錯了)
在商戶平臺的賬戶信息中更改API密鑰(賬戶設置-安全設置-API安全), 15分鐘後生效
2.1)統一下單用的是A商戶號,也必須是A商戶號登陸商戶平臺設置key纔對。
2.2)要注意統一下單請求參數中total_fee參數的類型是int類型。
3) 如果和微信的在線簽名工具不一致,說明程序有錯誤,常見的錯誤可能是:
3.1) 編碼問題,確保所有的都是utf-8的. 如果有中文, 可以先把中文改成英文重新簽名,看是否簽名錯誤,如果英文不會錯中文才會錯,基本肯定是編碼問題
3.2:)消息中字段大小寫和文檔中完全一致
4 )統一下單和調起支付簽名類型需要一致。
5)參數的類型和格式,長度限制需要完全符合文檔的要求