飞道科技

飞道科技文档总汇

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

配置URL Types

在Info下的Custom iOS Target Properties 下添加一个LSApplicationQueriesSchemes,并为新添加的项目新建一个子项目,如图所示

配置 Properties