出现这种原因一般都是后台拼接sign这个字段不对.

要么是拼接的顺序不对,要么就是大小写的问题

一般的顺序是:appid, noncestr, package, partnerid, prepayid, timestamp如果后台那边拼接有误,

客户端就需要自己来拼接.

 1  #pragma mark --签名算法,获取签名
 2  #define CC_MD5_DIGEST_LENGTH 16
 3 - (NSString *)getSignWithPartnerId:(NSString *)partnerId
 4 
 5                       withPrepayId:(NSString *)prepayId
 6 
 7                       withNonceStr:(NSString *)nonceStr
 8 
 9                      withTimeStamp:(UInt32)timeStamp
10 
11                        withPackage:(NSString *)package
12 
13 {
14 
15     //拼接stringA
16 
17     NSString *stringA = [NSStringstringWithFormat:@"appid=%@&noncestr=%@&package=%@&partnerid=%@&prepayid=%@&timestamp=%d",@"替换为微信appid", nonceStr, package, partnerId, prepayId, timeStamp];
18 
19     //拼接API秘钥
20 
21     NSString *stringSignTemp = [NSStringstringWithFormat:@"%@&key=%@", stringA,@"这里的key替换为微信商户平台中自己设置的key"];
22 
23     //MD5签名
24 
25     NSString *sign = [self md5:stringSignTemp];
26 
27     //转换成大写字母
28 
29     sign = [sign uppercaseString];
30 
31     return sign;
32 
33 }
34 
35 #pragma mark --MD5签名算法
36 
37 - (NSString *) md5:(NSString *) str
38 
39 {
40 
41     const char *cStr = [strUTF8String];
42 
43     unsignedchar result[CC_MD5_DIGEST_LENGTH];
44 
45     CC_MD5(cStr, strlen(cStr), result);// This is the md5 call
46 
47     return [NSStringstringWithFormat:
48 
49             @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
50 
51             result[0], result[1], result[2], result[3],
52 
53             result[4], result[5], result[6], result[7],
54 
55             result[8], result[9], result[10], result[11],
56 
57             result[12], result[13], result[14], result[15]
58 
59             ];
60 
61 }

这样就可以了..

posted on 2016-09-14 14:26  空虚的码农  阅读(426)  评论(0)    收藏  举报