安卓和小程序都可以拉起谋币,后端的簽名也在工具上驗證過了,驗簽通過症概。
現(xiàn)在就是iOS端蕾额,代碼運行是正常的,可以調起支付彼城,只要打包就會出錯诅蝶。
debug和release模式都嘗試打了,依然不行募壕。
微信的SDK也嘗試換過了调炬,跟SDK也沒有關系;
把時間戳換了就好了舱馅,因為后端返回的參數(shù)是字符串類型缰泡,且微信SDK上支付的類對象時間戳屬性是UInt32類型,所以一開始開發(fā)的時候接收到后端傳過來的時間戳參數(shù)后代嗤,給它立馬轉了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或者發(fā)生了錯誤
return 0;
}
if (number > UINT32_MAX) {
// 字符串表示的數(shù)值超過了UInt32的最大值
return UINT32_MAX;
}
return (uint32_t)number;
}
、溶锭、宝恶、
這種寫法就會導致時不時的出現(xiàn)簽名錯誤。且是偶現(xiàn)趴捅。
后面改為了
垫毙、、拱绑、
NSString *timeStr = params[@"timestamp"];// 替換成時間戳 TimeStamp
req.timeStamp = timeStr.intValue;
综芥、、猎拨、
不按照微信SDK里的轉膀藐,直接用int,就行了,不會出現(xiàn)簽名錯誤的問題红省。