今天做微信支付,js版本的,是基于官方提供的php sdk
正确配置完后,点击支付,提示timeStamp invalid,起初以为是本地时间和服务器时间不一致,所以重启校准了一下时间,但还是有问题,于是查看sdk代码,在WxPay.jsApiPay.php的GetJsApiParameters中看到timeStamp参数。
原代码是
$timeStamp = time();
后来查看文档说timeStamp参数应该为字符串,因为看到sdk demo里有用到date("YmdHis")
所以代码改成如下:
public function GetJsApiParameters($UnifiedOrderResult)
{
if(!array_key_exists("appid", $UnifiedOrderResult)
|| !array_key_exists("prepay_id", $UnifiedOrderResult)
|| $UnifiedOrderResult['prepay_id'] == "")
{
throw new WxPayException("参数错误");
}
$jsapi = new WxPayJsApiPay();
$jsapi->SetAppid($UnifiedOrderResult["appid"]);
<span style="color:#ff6666;">$timeStamp = date("YmdHis");</span>
$jsapi->SetTimeStamp($timeStamp);
$jsapi->SetNonceStr(WxPayApi::getNonceStr());
$jsapi->SetPackage("prepay_id=" . $UnifiedOrderResult['prepay_id']);
$jsapi->SetSignType("MD5");
$jsapi->SetPaySign($jsapi->MakeSign());
$parameters = json_encode($jsapi->GetValues());
return $parameters;
}
点击支付,成功通过。埋坑完毕:)