123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- //
- // DataMD5.m
- // WeChatDemo
- //
- // Created by 尹俊雄 on 15/7/2.
- // Copyright (c) 2015年 yjx. All rights reserved.
- //
- #import "DataMD5.h"
- #import <CommonCrypto/CommonDigest.h>
- @interface DataMD5()
- @property (nonatomic,strong) NSString *appid;
- @property (nonatomic,strong) NSString *mch_id;
- @property (nonatomic,strong) NSString *nonce_str;
- @property (nonatomic,strong) NSString *partnerkey;
- @property (nonatomic,strong) NSString *body;
- @property (nonatomic,strong) NSString *out_trade_no;
- @property (nonatomic,strong) NSString *total_fee;
- @property (nonatomic,strong) NSString *spbill_create_ip;
- @property (nonatomic,strong) NSString *notify_url;
- @property (nonatomic,strong) NSString *trade_type;
- @end
- @implementation DataMD5
- -(instancetype)initWithAppid:(NSString *)appid_key
- mch_id:(NSString *)mch_id_key
- nonce_str:(NSString *)noce_str_key
- partner_id:(NSString *)partner_id
- body:(NSString *)body_key
- out_trade_no :(NSString *)out_trade_no_key
- total_fee:(NSString *)total_fee_key
- spbill_create_ip:(NSString *)spbill_create_ip_key
- notify_url:(NSString *)notify_url_key
- trade_type:(NSString *)trade_type_key{
- self = [super init];
- if (self) {
- _appid = appid_key;
- _mch_id = mch_id_key;
- _nonce_str = noce_str_key;
- _partnerkey = partner_id;
- _body = body_key;
- _out_trade_no = out_trade_no_key;
- _total_fee = total_fee_key;
- _spbill_create_ip = spbill_create_ip_key;
- _notify_url = notify_url_key;
- _trade_type = trade_type_key;
-
- }
- return self;
- }
- ///获取sign签名
- - (NSString *)getSignForMD5{
- NSMutableDictionary *dic = [NSMutableDictionary dictionary];
- [dic setValue:_appid forKey:@"appid"];
- [dic setValue:_mch_id forKey:@"mch_id"];
- [dic setValue:_nonce_str forKey:@"nonce_str"];
- [dic setValue:_body forKey:@"body"];
- [dic setValue:_out_trade_no forKey:@"out_trade_no"];
- [dic setValue:_total_fee forKey:@"total_fee"];
- [dic setValue:_spbill_create_ip forKey:@"spbill_create_ip"];
- [dic setValue:_notify_url forKey:@"notify_url"];
- [dic setValue:_trade_type forKey:@"trade_type"];
- return [self createMd5Sign:dic];
- }
- //创建签名
- -(NSString*) createMd5Sign:(NSMutableDictionary*)dict
- {
- NSMutableString *contentString =[NSMutableString string];
- NSArray *keys = [dict allKeys];
- //按字母顺序排序
- NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
- return [obj1 compare:obj2 options:NSNumericSearch];
- }];
- //拼接字符串
- for (NSString *categoryId in sortedArray) {
- if ( ![[dict objectForKey:categoryId] isEqualToString:@""]
- && ![[dict objectForKey:categoryId] isEqualToString:@"sign"]
- && ![[dict objectForKey:categoryId] isEqualToString:@"key"]
- )
- {
- [contentString appendFormat:@"%@=%@&", categoryId, [dict objectForKey:categoryId]];
- }
- }
- //添加商户密钥key字段
- [contentString appendFormat:@"key=%@", _partnerkey];
- //得到MD5 sign签名
- NSString *md5Sign =[self md5:contentString];
-
- return md5Sign;
- }
- //创建发起支付时的sige签名
- -(NSString *)createMD5SingForPay:(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"];
- [signParams setObject:noncestr_key forKey:@"noncestr"];
- [signParams setObject:package_key forKey:@"package"];
- [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字段
- [contentString appendFormat:@"key=%@", @"yaBe20140901JJqqddSSkkBB20150717"];
- // NSString *signString =[self md5:contentString];
- NSString *result = [self md5:contentString];
- return result;
- }
- -(NSString *) md5:(NSString *)str
- {
- const char *cStr = [str UTF8String];
- //加密规则,因为逗比微信没有出微信支付demo,这里加密规则是参照安卓demo来得
- unsigned char result[16]= "0123456789abcdef";
- CC_MD5(cStr, (CC_LONG)strlen(cStr), result);
- //这里的x是小写则产生的md5也是小写,x是大写则md5是大写,这里只能用大写,逗比微信的大小写验证很逗
- return [NSString stringWithFormat:
- @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
- result[0], result[1], result[2], result[3],
- result[4], result[5], result[6], result[7],
- result[8], result[9], result[10], result[11],
- result[12], result[13], result[14], result[15]
- ];
- }
- @end
|