安卓和小程序都可以拉起,后端的签名也在工具上验证过了,验签通过。
现在就是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,就行了,不会出现签名错误的问题。