iOS微信支付配置
第三方库配置流程
项目使用@yyyyu/react-native-wechat第三方库,该库封装了微信的一些功能,链接如下
@yyyyu/react-native-wechat
(1)Link导入依赖包,可直接在VSCode中执行以下代码,或者与支付宝配置一样,通过图形界面导入
导入代码如下
react-native link @yyyyu/react-native-wechat
(2)添加如下两个依赖,其中第一个是自带的,可以直接搜索加入,第二个是@yyyyu/react-native-wechat中的,在项目的Products文件夹下找
- libsqlite3.tbd
- libRNLWeChat
(3)将以下代码复制到info.plist文件中的Information Property List节点下,将构建模式转化为文本使用双箭头图标,注意不是test目录下的info.plist,如下图所示
(4)在Info 下的URL types添加一项,其中Identifier 配置为alipay,Role 为Editor,URL Schemes中输入申请的wxid
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
(5)修改AppDelegate.m文件,将以下代码添加到AppDelegate.m文件中
#import <React/RCTLinkingManager.h>
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [RCTLinkingManager application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}
至此配置完成
原生SDK配置流程
一、导入依赖包
右键Libraries,选择add files
导入WxChat项目
在项目如图所示目录右键New Group添加一个组,命名为Wxapi,将之前导入的WeChat项目下SDK下的三个文件复制到Wxapi中,并创建WxpayModule.h和WxpayModule.m文件,如下图所示
WxpayModule.h中复制进以下代码
#import <React/RCTBridgeModule.h>
#import <React/RCTLog.h>
#import "WXApiObject.h"
#import "WXApi.h"
@interface WxpayModule : NSObject <RCTBridgeModule, WXApiDelegate>
@end
WxpayModule.m中复制进以下代码
#import <Foundation/Foundation.h>
#import "WxpayModule.h"
@implementation WxpayModule
{
RCTPromiseResolveBlock resolveBlock;
}
- (instancetype)init
{
self = [super init];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleWXPay:) name:@"WXPay" object:nil];
}
return self;
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)handleWXPay:(NSNotification *)aNotification
{
NSString *errCode = [aNotification userInfo][@"errCode"];
NSLog(@"wxpay finished, errCode = %@", errCode);
resolveBlock(@{ @"errCode": errCode });
}
RCT_EXPORT_METHOD(registerApp:(NSString *)APP_ID) {
NSLog(@"wxpay registerApp, appID %@", APP_ID);
[WXApi registerApp:APP_ID]; //向微信注册
}
RCT_EXPORT_METHOD(pay:(NSDictionary *)order
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject) {
NSLog(@"wxpay pay start");
resolveBlock = resolve;
//调起微信支付
PayReq *req = [[PayReq alloc] init];
req.partnerId = [order objectForKey:@"partnerid"];
req.prepayId = [order objectForKey:@"prepayid"];
req.nonceStr = [order objectForKey:@"noncestr"];
req.timeStamp = [[order objectForKey:@"timestamp"] intValue];
req.package = [order objectForKey:@"package"];
req.sign = [order objectForKey:@"sign"];
[WXApi sendReq:req];
}
RCT_REMAP_METHOD(isSupported, // 判断是否支持调用微信SDK
resolver:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject) {
if (![WXApi isWXAppInstalled]) resolve(@NO);
else resolve(@YES);
}
RCT_EXPORT_MODULE(Wxpay);
@end
二、配置项目
如图所示,在URL Types下输入以下信息其中URL Schemes中输入申请的wxid
在Info下的Custom iOS Target Properties 下添加一个LSApplicationQueriesSchemes,并为新添加的项目新建一个子项目,如图所示