ios接微信支付和字串轉json物件
阿新 • • 發佈:2018-11-19
幫朋友做個小活,微信支付的前期工作就不說了,網上一找一大把。就是伺服器發過來的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;