123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- #import <Foundation/Foundation.h>
- #import "payRequsestHandler.h"
- @implementation payRequsestHandler
- -(BOOL) init:(NSString *)app_id mch_id:(NSString *)mch_id;
- {
-
- payUrl = @"https://api.mch.weixin.qq.com/pay/unifiedorder";
- if (debugInfo == nil){
- debugInfo = [NSMutableString string];
- }
- [debugInfo setString:@""];
- appid = app_id;
- mchid = mch_id;
- return YES;
- }
- -(void) setKey:(NSString *)key
- {
- spkey = [NSString stringWithString:key];
- }
- -(NSString*) getDebugifo
- {
- NSString *res = [NSString stringWithString:debugInfo];
- [debugInfo setString:@""];
- return res;
- }
- -(long) getLasterrCode
- {
- return last_errcode;
- }
- -(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:@""]
- && ![categoryId isEqualToString:@"sign"]
- && ![categoryId isEqualToString:@"key"]
- )
- {
- [contentString appendFormat:@"%@=%@&", categoryId, [dict objectForKey:categoryId]];
- }
-
- }
-
- [contentString appendFormat:@"key=%@", spkey];
-
- NSString *md5Sign =[WXUtil md5:contentString];
-
-
- [debugInfo appendFormat:@"MD5签名字符串:\n%@\n\n",contentString];
- return md5Sign;
- }
- -(NSString *)genPackage:(NSMutableDictionary*)packageParams
- {
- NSString *sign;
- NSMutableString *reqPars=[NSMutableString string];
-
- sign = [self createMd5Sign:packageParams];
-
- NSArray *keys = [packageParams allKeys];
- [reqPars appendString:@"<xml>\n"];
- for (NSString *categoryId in keys) {
- [reqPars appendFormat:@"<%@>%@</%@>\n", categoryId, [packageParams objectForKey:categoryId],categoryId];
- }
- [reqPars appendFormat:@"<sign>%@</sign>\n</xml>", sign];
-
- return [NSString stringWithString:reqPars];
- }
- -(NSString *)sendPrepay:(NSMutableDictionary *)prePayParams
- {
- NSString *prepayid = nil;
-
-
- NSString *send = [self genPackage:prePayParams];
-
-
- [debugInfo appendFormat:@"API链接:%@\n", payUrl];
- [debugInfo appendFormat:@"发送的xml:%@\n", send];
-
-
- NSData *res = [WXUtil httpSend:payUrl method:@"POST" data:send];
-
-
- [debugInfo appendFormat:@"服务器返回:\n%@\n\n",[[NSString alloc] initWithData:res encoding:NSUTF8StringEncoding]];
-
- XMLHelper *xml = [[XMLHelper alloc] autorelease];
-
-
- [xml startParse:res];
-
- NSMutableDictionary *resParams = [xml getDict];
-
- NSString *return_code = [resParams objectForKey:@"return_code"];
- NSString *result_code = [resParams objectForKey:@"result_code"];
- if ( [return_code isEqualToString:@"SUCCESS"] )
- {
-
- NSString *sign = [self createMd5Sign:resParams ];
- NSString *send_sign =[resParams objectForKey:@"sign"] ;
-
-
- if( [sign isEqualToString:send_sign]){
- if( [result_code isEqualToString:@"SUCCESS"]) {
-
- prepayid = [resParams objectForKey:@"prepay_id"];
- return_code = 0;
-
- [debugInfo appendFormat:@"获取预支付交易标示成功!\n"];
- }
- }else{
- last_errcode = 1;
- [debugInfo appendFormat:@"gen_sign=%@\n _sign=%@\n",sign,send_sign];
- [debugInfo appendFormat:@"服务器返回签名验证错误!!!\n"];
- }
- }else{
- last_errcode = 2;
- [debugInfo appendFormat:@"接口返回错误!!!\n"];
- }
- return prepayid;
- }
- - ( NSMutableDictionary *)sendPay_demo
- {
-
- NSString *order_name = @"V3支付测试";
-
- NSString *order_price = @"1";
-
-
-
- srand( (unsigned)time(0) );
- NSString *noncestr = [NSString stringWithFormat:@"%d", rand()];
- NSString *orderno = [NSString stringWithFormat:@"%ld",time(0)];
- NSMutableDictionary *packageParams = [NSMutableDictionary dictionary];
-
- [packageParams setObject: appid forKey:@"appid"];
- [packageParams setObject: mchid forKey:@"mch_id"];
- [packageParams setObject: @"APP-001" forKey:@"device_info"];
- [packageParams setObject: noncestr forKey:@"nonce_str"];
- [packageParams setObject: @"APP" forKey:@"trade_type"];
- [packageParams setObject: order_name forKey:@"body"];
- [packageParams setObject: NOTIFY_URL forKey:@"notify_url"];
- [packageParams setObject: orderno forKey:@"out_trade_no"];
- [packageParams setObject: @"196.168.1.1" forKey:@"spbill_create_ip"];
- [packageParams setObject: order_price forKey:@"total_fee"];
-
-
- NSString *prePayid;
- prePayid = [self sendPrepay:packageParams];
-
- if ( prePayid != nil) {
-
-
- NSString *package, *time_stamp, *nonce_str;
-
- time_t now;
- time(&now);
- time_stamp = [NSString stringWithFormat:@"%ld", now];
- nonce_str = [WXUtil md5:time_stamp];
-
-
- package = @"Sign=WXPay";
-
- NSMutableDictionary *signParams = [NSMutableDictionary dictionary];
- [signParams setObject: appid forKey:@"appid"];
- [signParams setObject: nonce_str forKey:@"noncestr"];
- [signParams setObject: package forKey:@"package"];
- [signParams setObject: mchid forKey:@"partnerid"];
- [signParams setObject: time_stamp forKey:@"timestamp"];
- [signParams setObject: prePayid forKey:@"prepayid"];
-
-
- NSString *sign = [self createMd5Sign:signParams];
-
-
- [signParams setObject: sign forKey:@"sign"];
-
- [debugInfo appendFormat:@"第二步签名成功,sign=%@\n",sign];
-
-
- return signParams;
-
- }else{
- [debugInfo appendFormat:@"获取prepayid失败!\n"];
- }
- return nil;
- }
- - ( NSMutableDictionary *)sendPay:(NSString *)txtTitle money:(NSString *)money orderNo:(NSString *)orderNo notifyURL:(NSString *)notifyURL
- {
-
- NSString *order_name = txtTitle;
-
- NSString *order_price = money;
-
-
-
- srand( (unsigned)time(0) );
- NSString *noncestr = [NSString stringWithFormat:@"%d", rand()];
- NSString *orderno = orderNo;
- NSMutableDictionary *packageParams = [NSMutableDictionary dictionary];
-
- [packageParams setObject: appid forKey:@"appid"];
- [packageParams setObject: mchid forKey:@"mch_id"];
- [packageParams setObject: @"APP-001" forKey:@"device_info"];
- [packageParams setObject: noncestr forKey:@"nonce_str"];
- [packageParams setObject: @"APP" forKey:@"trade_type"];
- [packageParams setObject: order_name forKey:@"body"];
- [packageParams setObject: notifyURL forKey:@"notify_url"];
- [packageParams setObject: orderno forKey:@"out_trade_no"];
- [packageParams setObject: @"196.168.1.1" forKey:@"spbill_create_ip"];
- [packageParams setObject: order_price forKey:@"total_fee"];
-
-
- NSString *prePayid;
- prePayid = [self sendPrepay:packageParams];
-
- if (prePayid != nil) {
-
-
- NSString *package, *time_stamp, *nonce_str;
-
- time_t now;
- time(&now);
- time_stamp = [NSString stringWithFormat:@"%ld", now];
- nonce_str = [WXUtil md5:time_stamp];
-
-
- package = @"Sign=WXPay";
-
- NSMutableDictionary *signParams = [NSMutableDictionary dictionary];
- [signParams setObject: appid forKey:@"appid"];
- [signParams setObject: nonce_str forKey:@"noncestr"];
- [signParams setObject: package forKey:@"package"];
- [signParams setObject: mchid forKey:@"partnerid"];
- [signParams setObject: time_stamp forKey:@"timestamp"];
- [signParams setObject: prePayid forKey:@"prepayid"];
-
-
- NSString *sign = [self createMd5Sign:signParams];
-
-
- [signParams setObject: sign forKey:@"sign"];
-
- [debugInfo appendFormat:@"第二步签名成功,sign=%@\n",sign];
-
-
- return signParams;
-
- }else{
- [debugInfo appendFormat:@"获取prepayid失败!\n"];
- }
- return nil;
- }
- @end
|