美文网首页iOS 干货整理
微信支付的二次签名

微信支付的二次签名

作者: 赤焰军少帅林殊 | 来源:发表于2017-11-03 14:08 被阅读8次
    -(NSString *)createMD5SingForPayWithAppID:(NSString *)appid_key partnerid:(NSString *)partnerid_key prepayid:(NSString *)prepayid_key package:(NSString *)package_key noncestr:(NSString *)noncestr_key timestamp:(UInt32)timestamp_key{
        
        
        NSMutableDictionary *signParams = [NSMutableDictionary dictionary];
        [signParams setObject:appid_key forKey:@"appid"];//微信appid 例如wxfb132134e5342
        [signParams setObject:noncestr_key forKey:@"noncestr"];//随机字符串
        [signParams setObject:package_key forKey:@"package"];//扩展字段  参数为 Sign=WXPay
        [signParams setObject:partnerid_key forKey:@"partnerid"];//商户账号
        [signParams setObject:prepayid_key forKey:@"prepayid"];//此处为统一下单接口返回的预支付订单号
        [signParams setObject:[NSString stringWithFormat:@"%u",timestamp_key] forKey:@"timestamp"];//时间戳
        
        NSMutableString *contentString  =[NSMutableString string];
        NSArray *keys = [signParams allKeys];
        //按字母顺序排序
        NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            return [obj1 compare:obj2 options:NSNumericSearch];
        }];
        //拼接字符串
        for (NSString *categoryId in sortedArray) {
            if (   ![[signParams objectForKey:categoryId] isEqualToString:@""]
                && ![[signParams objectForKey:categoryId] isEqualToString:@"sign"]
                && ![[signParams objectForKey:categoryId] isEqualToString:@"key"]
                )
            {
                [contentString appendFormat:@"%@=%@&", categoryId, [signParams objectForKey:categoryId]];
            }
        }
        //添加商户密钥key字段  API 密钥
        [contentString appendFormat:@"key=%@", @"你的key"];
        NSString *result = [self MD5ForLower32Bate:contentString];//md5加密
        return result;
    }
    
    
    -(NSString *)MD5ForLower32Bate:(NSString *)str{
        
        //要进行UTF8的转码
        const char* input = [str UTF8String];
        unsigned char result[CC_MD5_DIGEST_LENGTH];
        CC_MD5(input, (CC_LONG)strlen(input), result);
        
        NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
        for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
            [digest appendFormat:@"%02x", result[i]];
        }
        
        return digest;
    }
    

    相关文章

      网友评论

        本文标题:微信支付的二次签名

        本文链接:https://www.haomeiwen.com/subject/rpjtmxtx.html