文档章节

IOS集成第三方支付、分享、登录功能小结(转)

RainOrz
 RainOrz
发布于 2016/02/25 14:14
字数 2531
阅读 264
收藏 3

集成ShareSDK社会化分享的时候集成了微信支付或者支付宝支付功能

(分别集成了微信支付和支付宝,用Ping++集成支付的烦请绕行…)


2016.01.07 更新(修改Xcode7.2 IOS9.2 微信客户端操作之后返回程序  微信的onResp回调方法不被执行的bug)


http://yun.baidu.com/share/link?shareid=187711184&uk=3055516665

不废话,先甩链接

第一,你需要有微信开发平台的开发者账号,(网址https://open.weixin.qq.com/,或者自行百度“微信open”,支付 宝支付同理,下同),并将你要集成的应用在你的开发者账号中注册,并获取支付权限(一般这步不需要程序员考虑,都是客户自己获取的,你只需要知道,没有支 付权限的应用,不可以集成支付)。

第一,你需要有微信开发平台的开发者账号,(网址https://open.weixin.qq.com/,或者自行百度“微信open”,支付 宝支付同理,下同),并将你要集成的应用在你的开发者账号中注册,并获取支付权限(一般这步不需要程序员考虑,都是客户自己获取的,你只需要知道,没有支 付权限的应用,不可以集成支付)。

第二,注册完你的应用,通过审核之后,你会获得开放平台给你发放属于这个应用的AppID和AppSecret



第三,在开发平台的资源中心(或者叫文档中心,SDK中心什么的),下载IOS的SDK(文档也可以下载下来方便查阅)。我这次的Demo是之前集成过ShareSDK的分享和第三方登录,所以直接用的ShareSDK中的微信SDK。

(ps,这里之前网友有过用ShareSDK中的微信SDK不支持支付功能,我这里是可以支付的,应该是Mob集成好了,如果你下载的不能用的话, 可以去微信官方下载官方的SDK,10M左右的样子,把ShareSDK中的微信SDK替换掉,替换的时候要注意,不能只替换文件,要看好工程中 Target选项卡里的文件路径是否删除了旧文件路径,否则的话可能旧文件路径会覆盖新文件路径,导致替换没有效果或者崩溃。)

第四,将下载好的SDK拷贝到工程文件夹中,然后再工程中AddFilesTo“你的工程”,



(这里注意,Add的时候要勾选CopyItemsIfNeeed,否则可能会出现找不到路径这种烦人的错误)

第五,配置你的工程。

1.添加系统依赖库,(这里我用了ShareSDK,所以也连Share必须的系统库也一并添加了),方法—点击工程名—Target—BuildPhases—Link Binary With Libraries—点击+号搜索你需要的系统库,并添加



SystemConfiguration.framework

QuartzCore.framework

CoreTelephony.framework

libicucore.dylib(ps,这里因为可能你的Xcode是Xcode7,所以这里的.dylib可能会在你的系统库里显示.tbd)正常添加就好

libz.1.2.5.dylib

Security.framework

JavaScriptCore.framework

libstdc++.dylib

CoreText.framework

libsqlite3.dylib

ImageIO.framework (shareSDK新浪必须依赖库)

AdSupport.framework(shareSDK新浪必须依赖库)

2.配置工程的URL Types中的URL Schemes,

这个URL Schemes是用来调起第三方客户端支付或分享或授权之后回到你的程序的标识

方法:点击工程名—Target—Info—URL Types—点击+号,在URL Schemes栏中填入你在第二步中获取到的APPID(图见上一步,自己找一下info选项卡)

3.如果是Xcode7需要在Info.Plist文件中加入字段LSApplicationQueriesSchemes,为Array类型,然后在里面添加两个小选项,分别为weixin和wechat(Xcode7http请求适配Xcode7的问题请自行百度)

第六、开始写代码了!

1.将Demo中的WXPay文件夹拷贝到工程文件夹中,然后Add到工程目录

2.在 AppDelegate.h中#import相关头文件,在AppDelegate.m文件中的application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions

方 法中添加[WXApi registerApp:APP_ID withDescription:@"demo 2.0"];(这里的APPID就是你第二步获取的APPID,一般建议写成宏。@“demo2.0”不需要修改),我的demo里在这个方法里还注册了 shareSDK,希望大家不要有疑惑。

3.在AppDelegate.m中加入这两个方法:

//重要更新,一下两个方法IOS9.0以后被废弃了,所以如果你是Xcode7.2的话,可能会出现不能进入微信的onResp回调方法,原因是下边两个方法没有被调用,所以这里更新一下,改用另外一个方法(并不建议删除这两个方法,新方法是9.0以后的方法,可能系统低版本的用户不支持。所以我三种方法都留下了,如果有人发现不能都留下的话,请简信告诉我一下,再次谢过了

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

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

//改用方法为- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options;


具体方法里的代码如何书写请看Demo中的注释。

4.配置完AppDelegate文件之后,向你的工程中拷贝入Demo中的UIViewController+WeChatAndAliPayMethod类目,并Add到工程中,

在你需要用到支付的页面引用这个类目。(详情请见Demo的ViewController页面方法和代码,仔细观看注释和理解代码之后微信支付的集成就完成了)

PS.支付宝集成和微信支付集成大同小异,如果你集成了微信支付,你会发现支付宝集成更简单。

第一步,将支付宝支付的SDK拷贝到工程文件夹中,然后Add到工程目录,

(ps。这里注意一下,我demo里ThirdParty下的AliPay那些文件都是需要你在这一步拷贝的东西。)



尤其是openssl和Util还有那两个.a文件。因为支付宝的开发文档写的实在是不怎么样,乱七八糟的,都没有直接给你要添加的SDK包,这些东西都是从官方的demo里抽出来的。具体你们可以下载官方demo看一看。

第二步、Add完SDK包之后,引入所需的系统库。调用UIViewController+WeChatAndAliPayMethod这个类目中的支付宝支付方法即可。(注意看我Demo中的代码和注释)



PS。 如果你在集成支付宝的时候可能会遇到<openssl/xxx.h>not found的错误,(你平时用别的SDK的时候也可能会遇到),这一般情况是Xcode找不到这些文件的路径。在这里,你可以在Targets中的 BuildSettings中的Header Search Paths选项卡中添加openssl的路径。



重点:Demo里有两个存放关键几个宏的文件,payRequsesrHandler.h和AliPayNeedDEF.h,这两个文件里面的内容你们要自己填写自己的数据。具体如何获取这些数据我的注释写的很明白了。仔细看一下就好。

还有,你们在调用我的支付类目中的方法的同时,要写一个监听,来通知你是否支付成功。这个在我的代码注释里写的很清楚,这里就不多赘述了。



接下来的部分是后来新增的。(三方登录,和三方分享,包括适配ios9

:三方登录和分享这些代码Mob官网都有,就不多赘述了。这里主要是为了减少大家的代码量,增强复用性进行的一些整合。如果哪里有问题或者处理不妥,希望码友们积极提出。

首先,能做到三方登录的话,和支付一样,需要你在第三方平台上注册的应用拥有登录权限

其次XCode7之后IOS9shareSDK对应也有相应的变化,第三方分享登录的时候,需要比之前多一些步骤,比如添加Schemes白名单:

info.plist中需要添加如此多的字段(为了适应新的sso授权。以下只是新浪微博,QQ,微信三个平台需要添加的字段)



添加LSApplicationQueriesSchemes数组型字段中的元素



为方便大家按需添加,这里进行分类:

新浪微博sinaweibo,

sinaweibohd,

sinaweibosso,

sinaweibohdsso,

weibosdk,(添加weibosdk需要)

weibosdk2.5(添加weibosdk需要)

微信

wechat,

weixin

QQ

mqqOpensdkSSoLogin,

mqqopensdkapiV2,

mqqopensdkapiV3,

wtloginmqq2,

mqq,

mqqapi

(以下是QQZone需添加的,但是一般情况一下,需要集成QQ分享登录的,都需要QQZone的,所以一般建议大家直接把QQ和QQzone的都添加进去

mqzone

mqzoneopensdk,

mqzoneopensdkapi,

mqzoneopensdkapi19,

mqzoneopensdkapiV2,

还有,不要忘记对URLType里面的设置。(QQ添加的时候需要用十六进制转化的,例:QQ41D9BC03

关于登录的简单整理:

我的demo工程中有个LoginMethodObject文件夹,里面有我自己新建的一个类LoginMethod

使用者只需要引用这个类,实例化一个对象。并实现代理

-(void)recieveTheUserInfo:(NSDictionary*)userInfo

errorMsg:(NSString *)errorMsg;

userInfo即是获取到的用户信息。里面我只获取了昵称,uid,头像等等简单的信息。如果需要其他信息的话需要特别对待。不过一般登录只需要uid就够了,所以这里不过多赘述。

注意:在实现这个代理的时候,为了方便,逻辑更清楚。需要大家做下判断,即判断errorMsg是否存在。

(像AFNetWorking一样)若存在errorMsg的话,说明获取失败,errorMsg打印出来即是错误原因。若errorMsg不存在代表获取成功,就可以直接用userInfo中的用户信息了



demo中的示例

具体可以看demo中的LoginViewController的运用。



关于第三方分享:

第三方分享的话,Mob的官网上写的很明白了,我就不多此一举再写什么了。Demo中有样板的,如果不想去mob翻的话,直接复制的话就可以了。

(单说一下,demo中写的是适用于所有平台均发送同一分享内容的方法。如果需要针对不同平台分享不同内容的话需要调用另外一个方法,如下)



对不同平台分享不同内容的代码调用



本文转载自:http://www.jianshu.com/p/5ba888badebd

上一篇: 获取 版本号
下一篇: 正则表达式 整理
RainOrz
粉丝 8
博文 152
码字总数 94033
作品 0
青浦
程序员
私信 提问
Phonegap各类商业插件

【Phonegap商业插件服务】[目前插件已经支持到Phonegap最新版本] 1.phonegap-百度社会化分享-andriod插件 v2.0 【该插件支持微信分享和朋友圈分享,qq好友分享,微博分享】 2.phonegap百度社...

夜澜小雨
2015/07/15
1K
0
微信开放平台开发工具包(SDK)

iOS开发工具包 开发工具包(SDK) 使用微信分享、登录、收藏、支付等功能需要的库以及文件。点击下载iOS开发工具包64位 使用微信语音识别接口、语音合成接口。点击下载 语音SDK+Demo+开发文档...

雪深
2015/02/05
0
0
友推分享组件海外版SDK发布

友推(youtui.mobi)作为国内优秀的移动应用组件服务提供商,为应用提供社交分享组件、积分兑换组件、第三方登录组件等整合组件服务。 友推贴心地为针对国外社交流量的开发者,推出分享组件海外...

a2664296548
2015/01/19
4
0
Java转iOS-第一个项目总结(1)

0.前言 本人14年12月份,从网站开发组转到了移动开发组,自己的java两年半工作经验变成了objective-c零经验。2015年1月份新启动了一个移动项目,年后因为人事变动,自己从辅助开发变成了"核心...

蛙牛
2015/03/31
0
67
APP下载二维码微信扫一扫无法打开解决方案(一张二维码安卓苹果通吃)

微信扫一扫屏蔽了APP下载连接无非是想让大家将资源转移到自家平台,国人微信中毒过深,看到二维码首先想到的一定是微信(好强大的用户引导)。为了更好的用户体验,只能向腾讯屈服将应用转移...

dsg87
03/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ant 中的fileset include等拷贝

拷贝一个目录到指定目录下 例:<copy todir="${basedir}/new"> <fileset dir="${basedir}/old"> <include name="appgen" /> <include name="appgen/" /> <include name=appgen/**" /> <incl......

shzwork
13分钟前
1
0
react-jianshu项目的创建

创建项目 1、github上创建仓库react-jianshu 2、将项目克隆到本地git clone git@github.com:startjcu/react-jianshu.git 3、在当前目录(项目目录的上级目录)下执行create-react-app react-...

星闪海洋
22分钟前
2
0
OSChina 周二乱弹 —— 小哥哥,你可以教我写代码吗

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @nnnm: 生活大爆炸,结束了,这部陪伴了漫长时间的情景喜剧,最终是以诺贝尔奖和大团圆收尾的。虽然,不算精彩,但也是温馨。而少年谢尔顿的...

小小编辑
今天
295
11
typescript 接口 函数类型 可索引类型

函数类型 可索引类型 数字索引签名 字符串索引签名 数字索引签名返回值 必须是 字符串索引签名返回值的子集 只读索引签名

lilugirl
今天
3
0
Oracle SQL语法实例合集

如需转载请注明出处https://my.oschina.net/feistel/blog/3052024 目的:迅速激活Oracle SQL 参考:《Oracle从入门到精通》 ------------------------------------------------------------......

LoSingSang
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部