IOS(ShareSDK)微信丶支付宝集成细节

ps:先来支付宝的。首先集成支付宝的SDK,这个真心是运气加上技术相结合才行~有时候一样的工程,就是给你报错~你能耐他何?然后第二天运行同样的工程,错误消失了~就是这么的神奇!详细的集成流程就不说了,简单大致提一下首先第一步要去与支付宝签约,获得商户ID也就是合作者身份,之后就开始下载官方文档与示例damo了,一步步按着官方文档来就行了.

PS:好了,运行之后就应该剩下一个报错了,这个报错有点麻烦,需要导入路径,让系统找到这个文件还是先把报错放出来吧

PS:下面是解决办法

PS:如果运行后openssl这个错误还是存在的话,那就不好意思了~重新导入吧~或者睡上一觉撸上一局吧~反正我是真切体会过的,晚上集成了几次都是剩下这个错,第二个重新运行,居然就可以了~就是真么的神奇。然后到获取以及上传公钥和私钥的问题了。






PS:然后是下载下来就是这个样子的




然后就搞定了啊~~由于现在网上的支付宝Demo都是在工程中签名加密的~所以这里我就不展示了~而且没用,现在的公司根本不会把签名加密放在工程当中了。所以我就以后台签名加密为例子。首先和后台商量如何给我返回数据,先上接口。

支付宝APP支付申请加签

调用接口(post)

www.401VN.com

请求参数

key (会员登录令牌)

pay_sn 支付编号

subject 订单主题描述信息

amount 订单金额

返回数据

resulr (参数字符串-加签之后的结果串)

apedcome

支付宝APP支付结果验签

调用接口(post)

www.401VN.com

请求参数

key (会员登录令牌)

alipay_resp 支付结果内的response数据串

resultStatus 结果状态码

sign_type 签名类型

sign 签名数据

返回数据

'1' 支付结果:成功

第一条接口是申请加签的接口,这条接口我们需要把订单的信息传给后台,让后台进行签名。然后给我们返回加签的结果。

首先这个第一条接口写在点击支付宝支付的那个按钮的点击方法哪里。

[NetWorkingpostWithUrlString:zhifubao_Signaparameters:prccsuccess:^(iddata) {

NSLog(@"网络请求成功");

[HUDhideAnimated:YES];

NSMutableDictionary* dict = [NSMutableDictionarydictionaryWithCapacity:10];

dict = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragments|NSJSONReadingMutableLeaveserror:nil];

NSLog(@"支付宝加签后返回的数据==%@",dict);

//NSLog(@"打断之后的数据=%@",arr);

if([dict[@"msg"]isEqualToString:@"1"]) {

//应用注册scheme,在AliSDKDemo-Info.plist定义URL types

NSString*appScheme =@"alipay2016111902989697";

// NOTE:将签名成功字符串格式化为订单字符串,请严格按照该格式

NSString*orderString = dict[@"datas"][@"retstr"];

// NOTE:调用支付结果开始支付

[[AlipaySDKdefaultService]payOrder:orderStringfromScheme:appSchemecallback:^(NSDictionary*resultDic) {

NSLog(@"支付宝回调后给我返回的数据源==%@",resultDic);

}];

}

}failure:^(NSError*error) {

NSLog(@"网络请求失败");

[HUDhideAnimated:YES];

}];

然后就是调用支付宝SDK的方法了。也就是下面的方法。

//该方法9.0以前的API接口

- (BOOL)application:(UIApplication*)application

openURL:(NSURL*)url

sourceApplication:(NSString*)sourceApplication

annotation:(id)annotation

{

if([url.hostisEqualToString:@"safepay"]) {

//支付跳转支付宝钱包进行支付,处理支付结果

[[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary*resultDic) {

NSLog(@"APPDelegate里面的result = %@",resultDic);

//9000代表是成功的意思,这是支付宝官方认定的,别问为什么!还有一点,这个9000是支付宝给你返回的支付成功信息,强烈不建议前端直接就以这个9000为标准判断支付成功,应该把这个字典传给后台,让后台记录判断之后,再给前端返回!前端再显示结果给用户知道。切记切记!!!

if([resultDic[@"resultStatus"]isEqualToString:@"9000"]) {

//然后和后台商量,支付宝给我们返回的一个字典要怎么传给后台,是直接就传了,还是说要再做点什么修改,我这里就修改了,麻烦的一比。

NSString* str =resultDic[@"result"];

NSString*d5 = [strstringByReplacingOccurrencesOfString:@"\""withString:@""];

NSString* d6 = [d5stringByReplacingOccurrencesOfString:@"{"withString:@""];

NSString* d7 = [d6stringByReplacingOccurrencesOfString:@"}"withString:@""];

NSString* d8 = [d7stringByReplacingOccurrencesOfString:@"alipay_trade_app_pay_response:"withString:@""];

NSUserDefaults* user = [NSUserDefaultsstandardUserDefaults];

NSDictionary* dic = [userobjectForKey:@"sss"];

NSString* kkk = dic[@"datas"][@"key"];

NSMutableDictionary* prcc = [NSMutableDictionarydictionaryWithCapacity:10];

[prccsetValue:kkkforKey:@"key"];

[prccsetValue:[NSStringstringWithFormat:@"%@",d8]forKey:@"alipay_resp"];

[prccsetValue:resultDic[@"resultStatus"]forKey:@"resultStatus"];

[prccsetValue:@"RSA"forKey:@"sign_type"];

[prccsetValue:@"sX6/UzkKOjiCNbUPiXX1jMEdCggqGIOwnCzDEgBndSATW/9Q9rke7ubhxNxHbRhMLAtiCQchG15hw93A+pH1w3vZ60/DLh99JD7NUEqE9qOiHnV5INZ+zFzNVkuR4S9xZovSp8MAkmEVlsD6sT7fhOxPi1VRSkBM/wD3iUA/iEY="forKey:@"sign"];

//然后这里就调用了第二条接口。返回结果如果成功了,就直接调用通知,跳转到指定的界面。

[NetWorkingpostWithUrlString:zhifubao_Resultparameters:prccsuccess:^(iddata) {

NSLog(@"网络请求成功");

NSMutableDictionary* dict = [NSMutableDictionarydictionaryWithCapacity:10];

dict = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragments|NSJSONReadingMutableLeaveserror:nil];

NSLog(@"成功了吗!!!!!%@",dict);

if([dict[@"msg"]isEqualToString:@"1"]) {

NSLog(@"的确是1111");

//创建通知

NSNotification*notification =[NSNotificationnotificationWithName:@"tongzhi"object:niluserInfo:dict];

//通过通知中心发送通知

[[NSNotificationCenterdefaultCenter]postNotification:notification];

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"支付结果"message:@"支付成功"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"确定",nil];

[alertshow];

}else{

NSLog(@"支付结果上传服务器失败");

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"支付结果"message:@"支付失败"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"确定",nil];

[alertshow];

}

}failure:^(NSError*error) {

NSLog(@"网络请求失败");

}];

}else{

//创建通知

NSNotification*notificatio =[NSNotificationnotificationWithName:@"DefeatZhifubao"object:niluserInfo:nil];

//通过通知中心发送通知

[[NSNotificationCenterdefaultCenter]postNotification:notificatio];

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"支付结果"message:@"支付失败"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"确定",nil];

[alertshow];

}

}];

//授权跳转支付宝钱包进行支付,处理支付结果

[[AlipaySDKdefaultService]processAuth_V2Result:urlstandbyCallback:^(NSDictionary*resultDic) {

NSLog(@"result = %@",resultDic);

//解析auth code

NSString*result = resultDic[@"result"];

NSString*authCode =nil;

if(result.length>0) {

NSArray*resultArr = [resultcomponentsSeparatedByString:@"&"];

for(NSString*subResultinresultArr) {

if(subResult.length>10&& [subResulthasPrefix:@"auth_code="]) {

authCode = [subResultsubstringFromIndex:10];

break;

}

}

}

NSLog(@"授权结果authCode = %@", authCode?:@"");

}];

}

//下面的这个是微信调用的方法!没错!微信就是这么一小句话就调用起来了!

return[WXApihandleOpenURL:urldelegate:self];

returnYES;

}

//下面这个方法是9.0以后的API的接口

- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options

{

if([url.hostisEqualToString:@"safepay"]) {

//支付跳转支付宝钱包进行支付,处理支付结果

[[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary*resultDic) {

NSLog(@"9.0以后的新接口API:result = %@",resultDic);

NSLog(@"1111111111");

//9000代表是成功的意思,这是支付宝官方认定的,别问为什么!还有一点,这个9000是支付宝给你返回的支付成功信息,强烈不建议前端直接就以这个9000为标准判断支付成功,应该把这个字典传给后台,让后台记录判断之后,再给前端返回!前端再显示结果给用户知道。切记切记!!!

if([resultDic[@"resultStatus"]isEqualToString:@"9000"]) {

//然后和后台商量,支付宝给我们返回的一个字典要怎么传给后台,是直接就传了,还是说要再做点什么修改,我这里就修改了,麻烦的一比。

NSString* str =resultDic[@"result"];

NSString*d5 = [strstringByReplacingOccurrencesOfString:@"\""withString:@""];

NSString* d6 = [d5stringByReplacingOccurrencesOfString:@"{"withString:@""];

NSString* d7 = [d6stringByReplacingOccurrencesOfString:@"}"withString:@""];

NSString* d8 = [d7stringByReplacingOccurrencesOfString:@"alipay_trade_app_pay_response:"withString:@""];

NSUserDefaults* user = [NSUserDefaultsstandardUserDefaults];

NSDictionary* dic = [userobjectForKey:@"sss"];

NSString* kkk = dic[@"datas"][@"key"];

NSMutableDictionary* prcc = [NSMutableDictionarydictionaryWithCapacity:10];

[prccsetValue:kkkforKey:@"key"];

[prccsetValue:[NSStringstringWithFormat:@"%@",d8]forKey:@"alipay_resp"];

[prccsetValue:resultDic[@"resultStatus"]forKey:@"resultStatus"];

[prccsetValue:@"RSA"forKey:@"sign_type"];

[prccsetValue:@"sX6/UzkKOjiCNbUPiXX1jMEdCggqGIOwnCzDEgBndSATW/9Q9rke7ubhxNxHbRhMLAtiCQchG15hw93A+pH1w3vZ60/DLh99JD7NUEqE9qOiHnV5INZ+zFzNVkuR4S9xZovSp8MAkmEVlsD6sT7fhOxPi1VRSkBM/wD3iUA/iEY="forKey:@"sign"];

//然后这里就调用了第二条接口。返回结果如果成功了,就直接调用通知,跳转到指定的界面。

[NetWorkingpostWithUrlString:zhifubao_Resultparameters:prccsuccess:^(iddata) {

NSLog(@"网络请求成功");

NSMutableDictionary* dict = [NSMutableDictionarydictionaryWithCapacity:10];

dict = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragments|NSJSONReadingMutableLeaveserror:nil];

NSLog(@"成功了吗!!!!!%@",dict);

if([dict[@"msg"]isEqualToString:@"1"]) {

//创建通知

NSNotification*notificationn =[NSNotificationnotificationWithName:@"tongzhinine"object:niluserInfo:dict];

//通过通知中心发送通知

[[NSNotificationCenterdefaultCenter]postNotification:notificationn];

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"支付结果"message:@"支付成功"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"确定",nil];

[alertshow];

}else{

NSLog(@"支付结果上传服务器失败");

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"支付结果"message:@"支付失败"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"确定",nil];

[alertshow];

}

}failure:^(NSError*error) {

NSLog(@"网络请求成功");

}];

}else{

//创建通知

NSNotification*notificati =[NSNotificationnotificationWithName:@"DefeatZhifubaonine"object:niluserInfo:nil];

//通过通知中心发送通知

[[NSNotificationCenterdefaultCenter]postNotification:notificati];

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:@"支付结果"message:@"支付失败"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"确定",nil];

[alertshow];

}

}];

//授权跳转支付宝钱包进行支付,处理支付结果

[[AlipaySDKdefaultService]processAuth_V2Result:urlstandbyCallback:^(NSDictionary*resultDic) {

NSLog(@"result = %@",resultDic);

//解析auth code

NSString*result = resultDic[@"result"];

NSString*authCode =nil;

if(result.length>0) {

NSArray*resultArr = [resultcomponentsSeparatedByString:@"&"];

for(NSString*subResultinresultArr) {

if(subResult.length>10&& [subResulthasPrefix:@"auth_code="]) {

authCode = [subResultsubstringFromIndex:10];

break;

}

}

}

NSLog(@"授权结果authCode = %@", authCode?:@"");

}];

}

//下面的这个是微信调用的方法!没错!微信就是这么一小句话就调用起来了!

return[WXApihandleOpenURL:urldelegate:self];

returnYES;

}

下面轮到微信支付了。微信比支付宝简单的太多太多了。因为微信分享如果你是使用了Share SDK的话,那你做微信支付的时候,根本就不需要再集成什么SDK了,直接就用分享的那个SDK就OK了!

所以这里直接就上硬菜了!

和后台商量之后,直接只需要一条接口就OK了

微信支付APP预支付申请,含加签

调用接口(post)

www.baidu.com

请求参数

key (会员登录令牌)

pay_sn 支付编号

subject 订单主题描述信息

amount 订单金额

返回数据

app 支付请求数据集合(包含sign)

微信只有一条接口,也是在微信支付按钮的点击方法那里写

[NetWorkingpostWithUrlString:weixinzhifu_Signaparameters:prccsuccess:^(iddata) {

NSLog(@"网络请求成功");

[HUDhideAnimated:YES];

NSMutableDictionary* dict = [NSMutableDictionarydictionaryWithCapacity:10];

dict = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragments|NSJSONReadingMutableLeaveserror:nil];

NSLog(@"微信加签后返回的数据==%@",dict);

//NSLog(@"打断之后的数据=%@",arr);

if([dict[@"msg"]isEqualToString:@"1"]) {

//调起微信支付

PayReq*request = [[PayReqalloc]init];

request.partnerId= dict[@"datas"][@"app"][@"partnerid"];

request.prepayId= dict[@"datas"][@"app"][@"prepayid"];

request.package=dict[@"datas"][@"app"][@"package"];

request.nonceStr= dict[@"datas"][@"app"][@"noncestr"];

request.timeStamp= [dict[@"datas"][@"app"][@"timestamp"]intValue];

//这里要注意key里的值一定要填对,微信官方给的参数名是错误的,不是第二个字母大写

NSMutableDictionary*signParams = [NSMutableDictionarydictionary];

[signParamssetObject:@"wx5942cca2360ff745"forKey:@"appid"];

[signParamssetObject: dict[@"datas"][@"app"][@"partnerid"]forKey:@"partnerid"];

[signParamssetObject: request.nonceStrforKey:@"noncestr"];

[signParamssetObject: request.packageforKey:@"package"];

[signParamssetObject: dict[@"datas"][@"app"][@"timestamp"]forKey:@"timestamp"];

[signParamssetObject: request.prepayIdforKey:@"prepayid"];

//生成签名

NSString*sign= dict[@"datas"][@"app"][@"sign"];

//添加签名

request.sign= sign;

//调起微信开始支付!!

[WXApisendReq:request];

NSLog(@"这是微信的打印");

}

}failure:^(NSError*error) {

NSLog(@"网络请求失败");

[HUDhideAnimated:YES];

}];

因为微信的支付的方法都是一样的,指的是9.0以前的9.0以后的都是那2个方法,而且微信只需要一句话,所以我这里我就不在写那2个方法了。但是还有微信一个9.0以前的方法,虽然无用,但是也写出来,显得全面一点,可以忽略的。

//就是下面的这个方法了

- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url

{

NSLog(@"11111WQEQ");

return[WXApihandleOpenURL:urldelegate:self];

}

最后一步就是就是微信给我们返回的信息的接收方法

-(void) onResp:(BaseResp*)resp

{

NSString*strMsg = [NSStringstringWithFormat:@"errcode:%d", resp.errCode];

NSString*strTitle;

if([respisKindOfClass:[SendMessageToWXRespclass]])

{

strTitle =@"发送媒体消息结果";

}

if([respisKindOfClass:[PayRespclass]]){

//支付返回结果,实际支付结果需要去微信服务器端查询

strTitle = [NSStringstringWithFormat:@"支付结果"];

switch(resp.errCode) {

caseWXSuccess:{

strMsg =@"恭喜您,支付成功!";

//[MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"success"}];

NSLog(@"%@",strMsg);

break;

}

caseWXErrCodeUserCancel:{

strMsg =@"已取消支付!";

//[MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"cancle"}];

NSLog(@"%@",strMsg);

break;

}

default:{

strMsg = [NSStringstringWithFormat:@"支付失败!"];

//[MYNotificationCenter postNotificationName:@"weixinPaystatusSuccess" object:nil userInfo:@{@"status":@"cancle"}];

NSLog(@"%@",strMsg);

break;

}

}

//创建通知

NSNotification*notificationnn =[NSNotificationnotificationWithName:@"weixinbaotongzhi"object:niluserInfo:nil];

//通过通知中心发送通知

[[NSNotificationCenterdefaultCenter]postNotification:notificationnn];

UIAlertView*alert = [[UIAlertViewalloc]initWithTitle:strTitlemessage:strMsgdelegate:selfcancelButtonTitle:nilotherButtonTitles:@"确定",nil];

[alertshow];

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 自己总结的微信支付宝支付流程和注意点: 准备工作: 需要公司的营业执照,税务信息,等老板的身份证信息等,我记得,用...
    Www刘阅读 18,555评论 2 50
  • 最近实现了支付宝sdk导入的视线功能,那么现在就讲一下实现的整个流程。(其实并没有想象中那么难) 一:第一步 需要...
    辛小二阅读 1,347评论 0 1
  • iOS支付 iOS支付分为两类,第三方支付和应用内支付(内购)。 第三方支付包括:支付宝支付、微信支付、银联支付、...
    请输入账号名阅读 6,176评论 3 22
  • 1,微信支付:微信支付其实还好,文档比较清楚:1,请求预支付码(服务器需要跟微信做好处理);2,发起支付;2,支付...
    WSKing的杂货铺阅读 1,419评论 2 8
  • 开始尝试一款据说已经很流行的“小游戏”——瘟疫公司。 这个游戏很像“生化危机”和“釜山行”的源头,生物科技公司研制...
    茉莉大大阅读 205评论 1 0