帮朋友做个小活,微信支付的前期工作就不说了,网上一找一大把。就是服务器发过来的json字符串转成json对象稍微卡了下。
代码如下:
void IosHelper::startWeiXinPay(const char *pStr)
{
if(pStr == nil)
return;
NSString *jsonString = [NSString stringWithCString:pStr encoding:NSUTF8StringEncoding];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *err = nil;
NSDictionary *wechatPayDic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
if(err != nil)
{
NSLog(@"json解析失败:%@",err);
return;
}
PayReq *req = [[PayReq alloc] init];
req.openID = [wechatPayDic objectForKey:@"appId"];
req.partnerId = [wechatPayDic objectForKey:@"partnerid"];
req.prepayId = [wechatPayDic objectForKey:@"prepayid"];
req.package = [wechatPayDic objectForKey:@"package"];
req.nonceStr = [wechatPayDic objectForKey:@"nonceStr"];
req.timeStamp = [[wechatPayDic objectForKey:@"timeStamp"] intValue];
..................省略
}
还有就是字符串md5的处理:
//得到sign
NSString *strSign = [[NSString alloc] initWithFormat:@"appid=%@%@", req.openID, @"&" ];
strSign = [strSign stringByAppendingFormat:@"noncestr=%@%@", req.nonceStr, @"&" ];
strSign = [strSign stringByAppendingFormat:@"package=%@%@", req.package, @"&" ];
strSign = [strSign stringByAppendingFormat:@"partnerid=%@%@", req.partnerId, @"&" ];
strSign = [strSign stringByAppendingFormat:@"prepayid=%@%@", req.prepayId, @"&" ];
strSign = [strSign stringByAppendingFormat:@"timestamp=%d%@", req.timeStamp, @"&" ];
strSign = [strSign stringByAppendingFormat:@"key=%@", [wechatPayDic objectForKey:@"key"] ];
unsigned char result[CC_MD5_DIGEST_LENGTH];
const char *pSign=[strSign UTF8String];
CC_MD5(pSign, (unsigned int)strlen(pSign), result);
NSMutableString *signret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH];
for (NSInteger i=0; i<CC_MD5_DIGEST_LENGTH; i++) {
[signret appendFormat:@"%02X", result[i]];
}
//req.sign = [NSString stringWithCString:(const char *)signret encoding:NSUTF8StringEncoding];
req.sign =(NSString *)signret;