版本记录
版本号 | 时间 |
---|---|
V1.0 | 2019.12.28 星期日 |
前言
很多app都有支付和提现功能,而移动支付中支付宝、微信无疑是国内重要的支付平台和工具,最近有一个项目需要增加微信支付功能,很久没有集成了,所以最近又重新集成并整理了下,希望对大家有所帮助。感兴趣的可以看下面几篇文章。
1. 微信业务相关(一) —— 微信支付集成(一)
需要环境
首先看下需要的环境配置
- SDK版本:
SDK1.8.6
或以上 - 微信版本:
7.0.7
或以上 - 系统版本:
iOS12
或以上
建议开发者接入新版本SDK, 覆盖测试微信7.0.7或以上版本、iOS12或13,以验证所使用的接口的功能性和可用性。
SDK更新内容
1. 内容更新
2019年下半年微信的SDK更新了,主要是更新了下面几个地方。
- 新增支持
Universal Links
进行安全性验证- 在iOS9之前,要在浏览器中唤醒APP,我们通常使用
scheme
。这种方式需要提前判断系统中是否安装了能够响应此scheme
的App
。当用户点击Universal Links
时,iOS
会将链接直接重定向到您的应用程序,而无需通过Safari
或您的网站进行路由。
- 在iOS9之前,要在浏览器中唤醒APP,我们通常使用
2. API的更改
- 相关的注册等接口进行了更改。
- 发送请求的接口进行了更改。
我们需要更改什么?
关于如何配置Universal Links
等这里就不多说了,大家可以去网站上进行搜索参考别人的配置即可。
大家的App应该不是第一版,所以这里就只说更改,不说已有的集成流程了。
1. 微信开发平台新增Universal Links配置
在维信开发平台上新增了Universal Links
这一栏,这里需要我们添加Universal Links
。这样微信就可以根据这个Universal Links
找到我们的App。
请到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将获得AppID,可立即用于开发。但应用登记完成后还需要提交审核,只有审核通过的应用才能正式发布使用。
2. 新增URL scheme
在Xcode中,选择你的工程设置项,选中“TARGETS”
一栏,在“info”
标签栏的“LSApplicationQueriesSchemes“
添加weixin
和weixinULAPI
。
这里weixinULAPI
是新增的。
3. 重写AppDelegate的continueUserActivity方法
在xcode
中重写continueUserActivity
的方法,如下所示:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRest
oring>> * __nullable restorableObjects))restorationHandler {
return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}
需要注意的是:这个是官网的例子,但是不一定这么写,有可能你们的逻辑比这个复杂多了,你设置代理的地方也可能不是
UIApplication
,所以这里还是要灵活的进行处理。
4. 相关API的更改
1) 关于微信注册API的更改
微信注册的API在1.8.6中进行了更改。
1.8.6版本
/*! @brief WXApi的成员函数,向微信终端程序注册第三方应用。
*
* 需要在每次启动第三方应用程序时调用。
* @attention 请保证在主线程中调用此函数
* @param appid 微信开发者ID
* @param universalLink 微信开发者Universal Link
* @return 成功返回YES,失败返回NO。
*/
+ (BOOL)registerApp:(NSString *)appid universalLink:(NSString *)universalLink;
旧版本
/*! @brief WXApi的成员函数,向微信终端程序注册第三方应用。
*
* 需要在每次启动第三方应用程序时调用。第一次调用后,会在微信的可用应用列表中出现,默认开启MTA数据上报。
* iOS7及以上系统需要调起一次微信才会出现在微信的可用应用列表中。
* @attention 请保证在主线程中调用此函数
* @param appid 微信开发者ID
* @param typeFlag 应用支持打开的文件类型
* @return 成功返回YES,失败返回NO。
*/
+(BOOL) registerApp:(NSString *)appid;
/*! @brief WXApi的成员函数,向微信终端程序注册第三方应用。
*
* 需要在每次启动第三方应用程序时调用。第一次调用后,会在微信的可用应用列表中出现。
* iOS7及以上系统需要调起一次微信才会出现在微信的可用应用列表中。
* @attention 请保证在主线程中调用此函数
* @param appid 微信开发者ID
* @param isEnableMTA 是否支持MTA数据上报
* @return 成功返回YES,失败返回NO。
*/
+(BOOL) registerApp:(NSString *)appid enableMTA:(BOOL)isEnableMTA;
/*! @brief WXApi的成员函数,向微信终端程序注册应用支持打开的文件类型。
*
* 需要在每次启动第三方应用程序时调用。调用后并第一次成功分享数据到微信后,会在微信的可用应用列表中出现。
* @see registerApp
* @param typeFlag 应用支持打开的数据类型, enAppSupportContentFlag枚举类型 “|” 操作后结果
*/
+(void) registerAppSupportContentFlag:(UInt64)typeFlag;
先看下1.8.6版本的注册API,新的版本只有一个注册方法,删除了MTA
机制。旧版本有三个方法。
2) 发送请求的更改
发送请求的API也进行了更改。
1.8.6版本
/*! @brief 发送请求到微信,等待微信返回onResp
*
* 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持以下类型
* SendAuthReq、SendMessageToWXReq、PayReq等。
* @param req 具体的发送请求。
* @param completion 调用结果回调block
*/
+ (void)sendReq:(BaseReq *)req completion:(void (^ __nullable)(BOOL success))completion;
/*! @brief 发送Auth请求到微信,支持用户没安装微信,等待微信返回onResp
*
* 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持SendAuthReq类型。
* @param req 具体的发送请求。
* @param viewController 当前界面对象。
* @param delegate WXApiDelegate对象,用来接收微信触发的消息。
* @param completion 调用结果回调block
*/
+ (void)sendAuthReq:(SendAuthReq *)req viewController:(UIViewController*)viewController delegate:(nullable id<WXApiDelegate>)delegate completion:(void (^ __nullable)(BOOL success))completion;
旧版本
/*! @brief 发送请求到微信,等待微信返回onResp
*
* 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持以下类型
* SendAuthReq、SendMessageToWXReq、PayReq等。
* @param req 具体的发送请求,在调用函数后,请自己释放。
* @return 成功返回YES,失败返回NO。
*/
+(BOOL) sendReq:(BaseReq*)req;
/*! @brief 发送Auth请求到微信,支持用户没安装微信,等待微信返回onResp
*
* 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持SendAuthReq类型。
* @param req 具体的发送请求,在调用函数后,请自己释放。
* @param viewController 当前界面对象。
* @param delegate WXApiDelegate对象,用来接收微信触发的消息。
* @return 成功返回YES,失败返回NO。
*/
+(BOOL) sendAuthReq:(SendAuthReq*)req viewController:(UIViewController*)viewController delegate:(id<WXApiDelegate>)delegate;
通过对比,可以看见,旧的API是返回BOOL类型的参数表示是否成功。而新的API是返回一个完成的completion block
,返回的是success
是否成功的值。
分享跳转二次问题
当用户首次使用新版本SDK发起分享时,将会出现如下交互流程:从App拉起微信-出现“正在连接”页面-返回App-重新打开微信。以上是新的安全验证流程,每个用户在首次使用时会出现上述跳转。
首先要说明的是这个不是问题。关于官网已经给了说明,第一次分享就会出现这个页面,下次就不会了。
不是问题,所以不用管。
参考文章
1. Universal Links-- 微信支付(1.8.6)
2. 关于openSDK1.8.6的更新说明 - 微信官方平台
后记
本篇主要讲述了微信支付集成之V1.8.6版本SDK更新,感兴趣的给个赞或者关注~~~