1. 程式人生 > >ios接微信支付和字串轉json物件

ios接微信支付和字串轉json物件

幫朋友做個小活,微信支付的前期工作就不說了,網上一找一大把。就是伺服器發過來的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;