文档章节

iOS--微信支付

指尖流年
 指尖流年
发布于 2017/07/11 14:54
字数 642
阅读 46
收藏 1
点赞 1
评论 0

不多说,直接上代码

一.集成微信

1 使用Cocopods 导入SDK,pod 'WechatOpenSDK'

2.设置URL Scheme,APPID,如图

3.在info里配置http网络请求和微信白名单,如图

二.项目代码

在AppDelegate.m里面:头文件#import "WXApi.h"//微信授权,遵守协议WXApiDelegate,注册微信

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

[WXApi registerApp:UIWeiXin_APPKEY];

}

//微信回调

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

{

//友盟分享    

BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation];

    if (result == FALSE) {

        //调用其他SDK,例如支付宝SDK等

            //微信支付

               [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];

               return YES;

    }

    return result;

}



// 这个方法是用于从微信返回第三方App

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

{

    return [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];

}

-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options

{

    return [self handleOpenURL:url];

}



-(BOOL) handleOpenURL:(NSURL *)url

{

   //微信

    if([url.description hasPrefix:UIWeiXin_APPKEY]){

        return [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];

     }else{

      //友盟

        return [[UMSocialManager defaultManager] handleOpenURL:url];

    }

}

//微信回调

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

    // 向微信请求授权后,得到响应结果----微信登录,可忽略

    if ([resp isKindOfClass:[SendAuthResp class]]) {

           SendAuthResp *temp = (SendAuthResp *)resp;  

        if((resp.errCode == 0)){//确认授权时调用

        [self getWXUserInfo:temp.code WithBaseRespErrorCode:resp.errCode];

          }else{        }

    }else if ([resp isKindOfClass:[PayResp class]]){//微信支付

            //启动微信支付的response

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

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

        switch (resp.errCode) {

            case 0:

                payResoult = @"支付结果:成功!";

                break;

            case -1:

                payResoult = @"支付结果:失败!";

                break;

            case -2:

                payResoult = @"用户已经退出支付!";

                break;

            default:

          payResoult = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];

            break;

        }

    }

}

在Controller中

-(void)pay:(UIButton *)sender

{

  [[HTTPRequest sharedInstance] GET:url parameters:param succeed:^(id responseObject) {

NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];

            if([dict[@"code"] isEqualToString:@"200"]){

            //微信支付调用

                [self WXWithDict:dict];       

           }

        } failure:^(NSError *error) {

            NSLog(@"error:%@",error);

              }];

}

-(void)WXWithDict:(NSDictionary *)dict

{    //需要创建这个支付对象

    PayReq *req   = [[PayReq alloc] init];

    // 商家id,在注册的时候给的

    req.partnerId = dict[@"partnerid"];

     // 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你

    req.prepayId  = dict[@"prepayid"];

     // 根据财付通文档填写的数据和签名

    //这个比较特殊,是固定的,只能是即req.package = Sign=WXPay

    req.package  = dict[@"package"];

       // 随机编码,为了防止重复的,在后台生成

    req.nonceStr  = dict[@"noncestr"];

       // 这个是时间戳,也是在后台生成的,为了验证支付的

    NSString * stamp = dict[@"timestamp"];

    req.timeStamp = stamp.intValue;

       // 这个签名也是后台做的

    req.sign = dict[@"sign"];

    NSLog(@"req--partnerId:%@,prepayId:%@,package:%@,nonceStr:%@,timeStamp:%d,sign:%@",req.partnerId,req.prepayId,req.package,req.nonceStr,req.timeStamp,req.sign);

    

    //发送请求到微信,等待微信返回onResp

    [WXApi sendReq:req];

}

注:后台返回的dict 中字段必须小写,如图

 

© 著作权归作者所有

共有 人打赏支持
指尖流年
粉丝 6
博文 56
码字总数 25456
作品 0
海淀
iOS工程师
苹果与微信“短兵相接” “神仙打架”不能让用户买单

苹果与微信此次“短兵相接”,更多反映出两大巨头关于游戏规则的一场“暗战”。即便如此,也绝不能将绑架用户利益、通过随意更改产品功能,作为自己占领高地的“撒手锏”。无论苹果还是微信,...

六库科技 ⋅ 06/08 ⋅ 0

iOS小白点效果、打地鼠游戏、轮播效果、画板、富文本编辑器等源码

iOS精选源码 美团外卖商家点菜页面(http://www.code4app.com/thread-29383-1-1.html) 板书录制演示程序(http://www.code4app.com/thread-29384-1-1.html) 分类轮播、直播间礼物列表轮播 -- O...

sunnyaigd ⋅ 04/24 ⋅ 0

开发微信H5视频秀项目遇到的坑

介绍 手头上正好有个项目,需要做一个微信端H5视频秀的一个项目,想想好像挺简单的,由两个视频组成,播放完第一个视频后点击按钮继而播放第二个视频。好了,结果微信的坑TM的多 问题排查 自...

🚲Allen ⋅ 05/18 ⋅ 0

又拍云Prism CDN 超低价 低延时 超强兼容的P2P-CDN

又拍云Prism CDN 超低价 低延时 超强兼容的P2P-CDN 2018-05-15 10:26编辑: 枣泥布丁分类:业界动态来源:https://www.upyun.com/products CDN又拍云 招聘信息: C++工程师 Cocos2d-x游戏客户...

枣泥布丁 ⋅ 05/15 ⋅ 0

iOS三维菜单、调试工具、封装通讯录、网络框架、多种控件和动画等源码

iOS精选源码 一个调用系统通讯录和获取通讯录所有联系人的封装(http://www.code4app.com/thread-29726-1-1.html) ios scrollview嵌套tableview同向滑动(初级、进阶), 支持OC / Swift(http...

sunnyaigd ⋅ 05/15 ⋅ 0

iOS天气动画、高仿QQ菜单、放京东APP、高仿微信、推送消息等源码

iOS精选源码 TYCyclePagerView iOS上的一个无限循环轮播图组件(http://www.code4app.com/thread-14507-1-1.html) iOS高仿微信完整项目源码(http://www.code4app.com/thread-14695-1-1.html)......

sunnyaigd ⋅ 06/12 ⋅ 0

iOS高仿QQ侧滑控件、下载框架、动画效果、扫一扫、颜色变化、K线图等源码

iOS精选源码 仿京东"加入购物车"转场动画(http://www.code4app.com/thread-28162-1-1.html) ColorTool(颜色转换)(http://www.code4app.com/thread-29256-1-1.html) Swift 专业版K线(http://w......

sunnyaigd ⋅ 04/17 ⋅ 0

iOS-Security 苹果安全白皮书都讲了些啥?

2017.03.27 原文地址 使用Google 按段落翻译(上传文档的不太准),通读一遍后去掉设备或网络的超专业术语,也算是筛选掉对开发者意义不大的信息吧! 苹果设计的 iOS 平台向来是以安全为核心...

si1ence ⋅ 2017/12/14 ⋅ 0

【AR】开始使用Vuforia开发iOS(2)

原 设置iOS开发环境 安装Vuforia iOS SDK 如何安装Vuforia iOS示例 编译并运行Vuforia iOS示例 支持iOS金属 iOS 64位迁移 设置iOS开发环境 适用于iOS的Vuforia引擎目前支持运行iOS 9及更高版...

lichong951 ⋅ 06/11 ⋅ 0

你见过最目瞪狗呆的bug是什么?

你见过最目瞪狗呆的bug是什么? 2018-05-28 14:01编辑: garace分类:程序人生来源:代码湾 bug网上注册刘伟楠 招聘信息: C++工程师 Cocos2d-x游戏客户端开发 iOS开发工程师 京东招聘iOS开发...

garace ⋅ 05/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api.DATA ls_appl_object TYPE gos_s_obj.DA...

JerryWang_SAP ⋅ 31分钟前 ⋅ 0

Cube的构建过程

Cube 的构建方式有两种:全量构建和增量构建。两者的构建过程完全一样,区别在于构建时读取的数据源是全集还是子集。 Cube的构建步骤: 1.创建临时的 Hive 平表(从 Hive 读取数据)。 2.计算...

无精疯 ⋅ 36分钟前 ⋅ 0

云计算的选择悖论如何对待?

导读 人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云...

问题终结者 ⋅ 39分钟前 ⋅ 0

637. Average of Levels in Binary Tree - LeetCode

Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这个树,把map里面填值,遍历结束后,再遍历这个map,把每...

yysue ⋅ 54分钟前 ⋅ 0

IDEA配置和使用

版本控制 svn IDEA版本控制工具不能使用 VCS-->Enable Version Control Integration File-->Settings-->Plugins 搜索Subversion,勾选SVN和Git插件 删除.idea文件夹重新生成项目 安装SVN客户......

bithup ⋅ 今天 ⋅ 0

Hive函数

1.函数explode (一转多) create table hive_wc(sentence string); load data local inpath '/home/hadoop/data/hive-wc.txt' into table hive_wc; 结果: hive > select * from hive_wc; ......

GordonNemo ⋅ 今天 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 今天 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部