ios接微信支付和字符串转json对象

本文详细介绍了如何在iOS应用中使用微信支付SDK,包括将服务器发送的JSON字符串转换为Objective-C对象的过程,以及如何处理字符串的MD5加密以生成支付所需的签名。

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

帮朋友做个小活,微信支付的前期工作就不说了,网上一找一大把。就是服务器发过来的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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值