IOS-发起微信支付方法

来源:互联网 发布:cnc角度头编程 编辑:程序博客网 时间:2024/06/05 09:47

WXPay+MD5.h

////  NSObject+MD5.h//  NEWDLD////  Created by zz on 16/7/28.//  Copyright © 2016年 dld. All rights reserved.//#import <Foundation/Foundation.h>#import "WXApi.h"@interface MD5 : NSObject+ (NSString *)getMd5_32Bit_String:(NSString *)srcString;//创建发起支付时的sign签名+(NSString *)createMD5SingForPayWithAppID:(PayReq *)req;@end

WXPay+MD5.m

////  NSObject+MD5.m//  NEWDLD////  Created by zz on 16/7/28.//  Copyright © 2016年 dld. All rights reserved.//#import "WXPay+MD5.h"#import <CommonCrypto/CommonDigest.h>@implementation MD5+ (NSString *)getMd5_32Bit_String:(NSString *)srcString{    const char *cStr = [srcString UTF8String];    unsigned char digest[CC_MD5_DIGEST_LENGTH];    CC_MD5( cStr, strlen(cStr), digest );    NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)        [result appendFormat:@"%02x", digest[i]];        return result;}//创建发起支付时的sign签名+(NSString *)createMD5SingForPayWithAppID:(PayReq *)req{    NSString *parter_key = @"dld123******************";    NSMutableDictionary *signParams = [NSMutableDictionary dictionary];    [signParams setObject:req.openID forKey:@"appid"];//微信appid     [signParams setObject:req.nonceStr forKey:@"noncestr"];//随机字符串    [signParams setObject:req.package forKey:@"package"];//扩展字段  参数为 Sign=WXPay    [signParams setObject:req.partnerId forKey:@"partnerid"];//商户账号    [signParams setObject:req.prepayId forKey:@"prepayid"];//此处为统一下单接口返回的预支付订单号    [signParams setObject:[NSString stringWithFormat:@"%ld",req.timeStamp] 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=%@", parter_key];    NSString *result = [MD5  getMd5_32Bit_String:contentString];//md5加密    return result;}@end

发起支付

PayReq *req = [[PayReq alloc]init];        req.openID = [[NSString alloc]initWithFormat:@"%@",payUrl[@"appid"]];        req.partnerId = payUrl[@"partnerid"];        req.prepayId = payUrl[@"prepayid"];        req.nonceStr = payUrl[@"noncestr"];        req.timeStamp = (UInt32)[payUrl[@"timestamp"]integerValue];        req.package = @"Sign=WXPay";        req.sign = [MD5 createMD5SingForPayWithAppID:req];//payUrl[@"sign"];                BOOL flag = [WXApi sendReq:req];


0 0