安卓和小程序都可以拉起,后端的簽名也在工具上驗證過了,驗簽通過。
現在就是iOS端,代碼運行是正常的,可以調起支付,只要打包就會出錯。
debug和release模式都嘗試打了,依然不行。
微信的SDK也嘗試換過了,跟SDK也沒有關系;
把時間戳換了就好了,因為后端返回的參數是字符串類型,且微信SDK上支付的類對象時間戳屬性是UInt32類型,所以一開始開發的時候接收到后端傳過來的時間戳參數后,給它立馬轉了uint32_t類型。
如下:
、、、
uint32_t timer = NSStringToUInt32(params[@"timestamp"]);
req.timeStamp = timer; // 替換成時間戳 TimeStamp
uint32_t NSStringToUInt32(NSString *string) {
char *end;
unsigned long number = strtoul([string UTF8String], &end, 10);
if ((errno != 0 && errno != ERANGE) || end != [string UTF8String] + [string length]) {
// 字符串不是有效的UInt32或者發生了錯誤
return 0;
}
if (number > UINT32_MAX) {
// 字符串表示的數值超過了UInt32的最大值
return UINT32_MAX;
}
return (uint32_t)number;
}
、、、
這種寫法就會導致時不時的出現簽名錯誤。且是偶現。
后面改為了
、、、
NSString *timeStr = params[@"timestamp"];// 替換成時間戳 TimeStamp
req.timeStamp = timeStr.intValue;
、、、
不按照微信SDK里的轉,直接用int,就行了,不會出現簽名錯誤的問題。