ios不行安卓可以 微信签名_微信支付-支付验证签名失败(iOS)

在iOS项目中集成微信支付时遇到一个问题,支付验证签名失败,但安卓端正常。问题出在时间戳的位数上,iOS仅支持10位时间戳,而后台返回的是13位(Java时间戳)。修正方法是让后台将时间戳除以1000,确保与iOS兼容。这个案例强调了文档检查和跨平台协调的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在项目中添加微信支付,iOS端的所有东西都已经按照文档搞好了,可就是跳转到微信的时候显示“支付验证签名失败”,可是安卓端的都没有问题,就很郁闷了。

后来在对文档的时候发现。。。

666 时间戳十位啊。。。

可是后台返回的timestamp确实13位的。。。怒找后台改了

立刻OK了。。。所以说咱们一定要协调好,仔细查对文档,毕竟用的是人家的东西

数字时间戳与时间的相互抓换

注意:由于Java比PHP的时间精确,所以,后台数据的时间java是13位的,而php是10位的,iOS时间抓换只支持10位数的,所以如果java写后台的话,把数字/1000就行了.具体做法如下:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

formatter.dateFormat = @"YYYY-MM-dd HH:mm:ss";

NSDate *date = [[NSDate alloc] init];

SString *datestr = [formatter stringFromDate:date];

NSLog(@"%@",datestr);

// 时间转化为数字时间戳

/*

- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate;

@property (readonly) NSTimeInterval timeIntervalSinceNow;

@property (readonly) NSTimeInterval timeIntervalSince1970;

*/

NSInteger numtime = date.timeIntervalSince1970;

NSString *numtimestr = [NSString stringWithFormat:@"%ld",numtime];

NSLog(@"%@",numtimestr);

// 数字时间转化为时间戳,如果为13位,除以1000,或者去掉后3位即可

NSDate *date2 = [NSDate dateWithTimeIntervalSince1970:numtime];

NSString *datestr2 = [formatter stringFromDate:date2];

NSLog(@"%@",datestr2);

ps:服务端最后传给客户端的签名是需要重新生成的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值