iOS--->微信支付小结

说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下
***那么首先还是由公司去创建并申请使用微信支付所需的信息

1.接下来就是微信支付的集成步骤了,参考着开发文档来,非常简单的 下载SDK,项目中导入所需的文件WxPay文件夹中,注意其中的.a文件容易丢失

2.根据文档对其中支持的非arc进行设置

3.设置微信支付的URL types

4.接下来就是代码内部的事情了,做支付我们知道首先需要在appdelegate中设置相应的属性

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

  1. self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
  2. //微信支付配置 自己申请注册的
  3. [WXApi registerApp:@"wx0e65e1b96577f407" withDescription:@"demo 2.0"];
  4. return YES;

}

//微信支付界面 onResp函数回调界面

//处理微信通过URL,启动App时传递的数据

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

  1. return [WXApi handleOpenURL:url delegate:self];

}

说到支付,那么支付结果的回调是必不可少的,还是在appdelegate页面

//微信支付返回 回调

-(void)onResp:(BaseResp*)resp{

  1. NSLog(@"tets");
  2. NSInteger num=0;
  3. if ([resp isKindOfClass:[PayResp class]]){
  4. PayResp*response=(PayResp*)resp;
  5. switch(response.errCode){
  6. case WXSuccess:
  7. {
  8. num=1;
  9. //服务器端查询支付通知或查询API返回的结果再提示成功
  10. NSLog(@"支付成功");
  11. // [self weixinzhifuhuidiao:1];
  12. break;
  13. }
  14. case WXErrCodeUserCancel:
  15. {
  16. num=2;
  17. NSLog(@"cewsgu");
  18. // [self weixinzhifuhuidiao:2];
  19. }
  20. break;
  21. default:
  22. num=3;
  23. // [self weixinzhifuhuidiao:3];
  24. NSLog(@"支付失败,retcode=%d",resp.errCode);
  25. break;
  26. }
  27. }

}

最后就不说闲话了,直接在支付页面上代码参考官方Demo即可(貌似官方有两种方式,这里仅使用其中一种)

#pragma mark --------- 微信支付 demo ---------

-(void)setWeixinSuccessString:(NSString *)weixinSuccessString{

  1. _weixinSuccessString=weixinSuccessString;
  2. [SVProgressHUD showWithStatus:@"正在提交预支付信息"];
  3. GRWDDDRequest * request=[[GRWDDDRequest alloc]init];
  4. [request weixinyuzhifuWithString:weixinyuazhifURL parems:@{@"Income":@(_totalprice),@"OrderNo":_dataDict[@"orderNo"]} success:^(id data) {
  5. NSDictionary * dict=[NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
  6. if ([dict[@"Result"] floatValue] == 1) {
  7. NSString * message = [NSString stringWithFormat:@"订单号:%@\r总支付价格:%0.2f元",_dataDict[@"orderNo"],_totalprice];
  8. UIAlertView * alertView=[[UIAlertView alloc]initWithTitle:@"微信支付信息" message:message delegate:self cancelButtonTitle:@"确定" otherButtonTitles:@"取消", nil];
  9. alertView.delegate=self;
  10. alertView.tag=2015;
  11. [alertView show];
  12. _weixinDict=dict[@"Data"];
  13. }else{
  14. UIAlertView * alertView=[[UIAlertView alloc]initWithTitle:@"支付失败" message:dict[@"Data"] delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
  15. [alertView show];
  16. }
  17. [SVProgressHUD dismiss];
  18. } fail:^(NSError *error) {
  19. [SVProgressHUD dismiss];
  20. }];

}

// 请求回调微信支付

-(void)sendzhifu{

  1. _dict =[NSDictionary dictionary];
  2. _dict = [self qianming:_weixinDict];
  3. PayReq *request = [[PayReq alloc] init];
  4. request.partnerId = _dict[@"partnerid"];
  5. request.prepayId= _dict[@"prepayid"];
  6. request.package = _dict[@"package"];
  7. request.nonceStr= _dict[@"noncestr"];
  8. request.timeStamp= (UInt32)[_dict[@"timestamp"] integerValue];
  9. request.sign= _dict[@"sign"];
  10. [WXApi sendReq:request];

}

-(NSDictionary *)qianming:(NSDictionary *)ttdict{

  1. payRequsestHandler * handler = [[payRequsestHandler alloc]init];
  2. [handler init:@"wx0e65e1b96577f407" mch_id:@"1265805801"];
  3. [handler setKey:@"CLSH1984AWST1982weixinapihd2015t"];
  4. NSString *prePayid;
  5. prePayid = ttdict[@"prepayid"];
  6. if ( prePayid != nil) {
  7. //获取到prepayid后进行第二次签名
  8. NSString *package, *time_stamp, *nonce_str;
  9. //设置支付参数
  10. time_t now;
  11. time(&now);
  12. time_stamp = [NSString stringWithFormat:@"%ld", now];
  13. nonce_str = [WXUtil md5:time_stamp];
  14. //重新按提交格式组包,微信客户端暂只支持package=Sign=WXPay格式,须考虑升级后支持携带package具体参数的情况
  15. //package = [NSString stringWithFormat:@"Sign=%@",package];
  16. package = @"Sign=WXPay";
  17. //第二次签名参数列表
  18. NSMutableDictionary *signParams = [NSMutableDictionary dictionary];
  19. [signParams setObject: ttdict[@"appId"] forKey:@"appid"];
  20. [signParams setObject: nonce_str forKey:@"noncestr"];
  21. [signParams setObject: package forKey:@"package"];
  22. [signParams setObject: ttdict[@"partnerid"] forKey:@"partnerid"];
  23. [signParams setObject: time_stamp forKey:@"timestamp"];
  24. [signParams setObject: ttdict[@"prepayid"] forKey:@"prepayid"];
  25. //[signParams setObject: @"MD5" forKey:@"signType"];
  26. //生成签名
  27. NSString *sign = [handler createMd5Sign:signParams];
  28. //添加签名
  29. [signParams setObject: sign forKey:@"sign"];
  30. NSLog(@"*****%@ ******",sign);
  31. //返回参数列表
  32. return signParams;
  33. }
  34. else{
  35. return nil;
  36. }
  37. return nil;

}

//微信支付返回 回调

-(void)onResp:(BaseResp*)resp{

  1. NSLog(@"判断是否执行此路径 **** %@ **** %@",_orderNoLabel.text,_dataDict[@"orderNo"]);
  2. self.ceshixiancheng=@"";
  3. if ([resp isKindOfClass:[PayResp class]]){
  4. PayResp*response=(PayResp*)resp;
  5. switch(response.errCode){
  6. case WXSuccess:
  7. {
  8. //服务器端查询支付通知或查询API返回的结果再提示成功
  9. NSLog(@"支付成功");
  10. break;
  11. }
  12. case WXErrCodeUserCancel:
  13. {
  14. }
  15. break;
  16. default:
  17. NSLog(@"支付失败,retcode=%d",resp.errCode);
  18. break;
  19. }
  20. }

}

//微信支付结果 二次确认

-(void)weixinzhifuhuidiao:(NSInteger)state{

  1. NSUserDefaults * userDefaults=[NSUserDefaults standardUserDefaults];
  2. NSDictionary * userDict=[userDefaults valueForKey:@"login"];
  3. [SVProgressHUD showWithStatus:@"正在核对支付信息,请稍等……"];
  4. GRWDDDRequest * request=[[GRWDDDRequest alloc]init];
  5. [request weixinzhifujieguoWithString:weixinzhifujieguoURL parems:@{@"orderno":_dataDict[@"orderNo"],@"payno":_weixinDict[@"payNo"],@"state":@(state),@"menberId":userDict[@"Data"][@"Id"]} success:^(id data) {
  6. NSDictionary * dict=[NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
  7. if ([dict[@"Result"] integerValue] == 1) {
  8. [SVProgressHUD showSuccessWithStatus:dict[@"Data"]];
  9. [self.navigationController popViewControllerAnimated:YES];
  10. }else{
  11. [SVProgressHUD showErrorWithStatus:dict[@"Data"]];
  12. }
  13. NSLog(@"%@",dict);
  14. } fail:^(NSError *error) {
  15. [SVProgressHUD dismiss];
  16. }];

}

到这里微信支付也就结束了,其他的就是解决问题了,集成的过程中出现错误不可避免,解决即可
1>启动后,出现闪退现象:检查签名是否正确(需要二次签名),在URL Schemes中检查是否正确添加了微信appid,检查你是否注册了appid
***最普遍的错误就是:sign字段,必须要自己生成的

ps:我刚开始时出现了很多错误,然而查也没找到答案,总后用了神技:删除重新集成一遍,然后就这样默默地成功了。。。其实我也不知道为什么,有时候实在没办法,那就重新加一遍,说不定可以解决呢!!!!

iOS--->微信支付小结的更多相关文章

  1. iOS微信支付集成

    概述 iOS微信支付集成 详细 代码下载:http://www.demodashi.com/demo/10735.html 支付宝和微信都是业界的老大哥,相信大家都有所觉得文档.SDK都是各种坑吧(纯 ...

  2. iOS微信支付无法直接返回APP的问题

    最近新测个项目,发现在IOS手机的APP上使用微信支付无法直接返回APP. 咨询微信客服,了解到无法直接返回APP的原因是收款配置的APPID为合作商家的APPID,而不是公司APP的APPID. 当 ...

  3. iOS 微信支付总结

    1.支付流程 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_3 商户系统和微信支付系统主要交互说明: 步骤1:用户在商户APP中选择 ...

  4. iOS 微信支付

    相关资料 SDK下载:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1 APP端开发步骤说明:https://pay.weixin ...

  5. iOS微信支付

    SDK接入 服务器签名版本 官方已经是建议使用服务器签名来接入微信支付,实际上从安全上考虑,确实是每个客户端不应该知道RAS密钥,也不需要每个客户端都写一遍签名的算法. 服务端接入流程文档:https ...

  6. ios微信支付成功后点击左上角返回不走回调的问题

    最近做微信支付发现ios9以后出现的跳转其他app后左上角有返回xxx功能会影响微信支付回调,情况如图 返回后不走下面的方法 - (BOOL)application:(UIApplication *) ...

  7. iOS 微信支付流程详解

    背景 自微信支付.支付宝支付入世以来,移动端的支付日渐火热.虚拟货币有取代实体货币的趋向(这句纯属扯淡,不用管),支付在app开发中是一项基本的功能,有必要去掌握.从难易程度上讲,不管是微信支付还是支 ...

  8. ios微信支付 v3

    V2版本和V3版本存在很大的差异. 1. 从成功通过微信支付商户的资料审核返回的邮件开始: 你可以获得这些参数  appid,appSecret,partnerID,    partnerKey(从平 ...

  9. iOS微信支付demo运行报错解决如下

    要接入微信支付的小伙伴,首先要下载一份官方demo(APP微信支付官方Demo下载),然后打开工程,准备大干一场. 1.编译报错 编译的时候居然直接报错了(orz) 错误提示: APP微信支付官方De ...

  10. iOS 微信支付SDK与微信友盟分享两者同时集成时,出现的问题与解决之路。

    这两天改版一个旧的APP,要旧貌换新颜,拿到app后进行编译,一直报下面的错误. 报不认识的符号名PayReq错误.奇怪,啥也没动就这样,真不知道给的包是不是本来就是个报错的工程. 不管怎样,要对它修 ...

随机推荐

  1. .NetCore MVC中的路由(2)在路由中使用约束

    p { margin-bottom: 0.25cm; direction: ltr; color: #000000; line-height: 120%; orphans: 2; widows: 2 ...

  2. html与html5

    HTML 是一种在 Web 上使用的通用标记语言.HTML 允许你格式化文本,添加图片,创建链接.输入表单.框架和表格等等,并可将之存为文本文件,浏览器即可读取和显示.HTML 的关键是标签,其作用是 ...

  3. 如何在Elasticsearch中安装中文分词器(IK+pinyin)

    如果直接使用Elasticsearch的朋友在处理中文内容的搜索时,肯定会遇到很尴尬的问题--中文词语被分成了一个一个的汉字,当用Kibana作图的时候,按照term来分组,结果一个汉字被分成了一组. ...

  4. 从阿里巴巴笔试题看Java加载顺序

    一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...

  5. spring applicationContext.xml和hibernate.cfg.xml设置

    applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  6. javascript有用小功能总结(未完待续)

    1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...

  7. BPM配置故事之案例14-数据字典与数据联动

    小明遇到了点麻烦,他昨天又收到了行政主管发来的邮件,要求把出差申请单改由H3 BPM进行,表单如下 行政主管的出差申请表 小明对表单进行了调整,设计出了一份适合在系统中使用的表单,但在"出差 ...

  8. Zabbix 漏洞分析

    之前看到Zabbix 出现SQL注入漏洞,自己来尝试分析. PS:我没找到3.0.3版本的 Zabbix ,暂用的是zabbix 2.2.0版本,如果有问题,请大牛指点. 0x00 Zabbix简介 ...

  9. iOS从零开始学习直播之3.美颜

      任何一款直播软件都必须进行美颜,不然哪来的那么多美女,所以技术改变世界,不只是说说而已.美颜在采集的时候就得就行,让主播实时看到直播的效果. 1.美颜原理   其实美颜的本质就是美白和磨皮,分别通 ...

  10. 软件工程(C编码实践篇)学习心得

    孟繁琛 + 原创作品转载请注明出处 + <软件工程(C编码实践篇)>MOOC课程 http://mooc.study.163.com/course/USTC-1000002006 软件工程 ...