reactnative ios微信支付升級(jí)1.8.7以上版本

1.首先把sdk相關(guān)文件替換,在官網(wǎng)下載。

2.創(chuàng)建wxApi文件夾,在里面引入對(duì)應(yīng)的sdk文件


Wxpay的目錄

2.1 在Wxpay文件夾內(nèi)創(chuàng)建WxpayModule.h文件

內(nèi)容為:

#import

#import

#import "WXApiObject.h"

#import

#import "WXApi.h"

@interface WxpayModule : NSObject <RCTBridgeModule, WXApiDelegate>

@end

2.2 在Wxpay文件夾內(nèi)創(chuàng)建WxpayModule.m文件

內(nèi)容為:

#import "WxpayModule.h"

@implementation WxpayModule

RCTPromiseResolveBlock resolveBlock = nil;

- (instancetype)init

{

? self= [superinit];

? 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 =? [aNotificationuserInfo][@"errCode"];

? resolveBlock(@{@"errCode": errCode});

}

RCT_EXPORT_METHOD(registerApp:(NSString*)APP_ID){

? [WXApi registerApp: APP_ID universalLink:@"https://xx.xx.xx/xx/"];//向微信注冊

}

RCT_EXPORT_METHOD(pay:(NSDictionary *)order

? ? ? ? ? ? ? ? ? resolver:(RCTPromiseResolveBlock)resolve

? ? ? ? ? ? ? ? ? rejecter:(RCTPromiseRejectBlock)reject){

? resolveBlock= resolve;

? //調(diào)起微信支付

? //注意order取的值對(duì)應(yīng)的key要和自己服務(wù)器提供的一致

? PayReq*req = [[PayReqalloc]init];

? req.partnerId= [orderobjectForKey:@"partnerid"];

? req.prepayId= [orderobjectForKey:@"prepayid"];

? req.nonceStr= [orderobjectForKey:@"noncestr"];

? req.timeStamp= [[orderobjectForKey:@"timestamp"]intValue];

? req.package= [orderobjectForKey:@"package"];

? req.sign= [orderobjectForKey:@"sign"];

? [WXApi sendReq:req completion: nil];

}

RCT_REMAP_METHOD(isSupported, // 判斷是否支持調(diào)用微信SDK

?? ? ? ? ? ? ? ? resolver:(RCTPromiseResolveBlock)resolve

?? ? ? ? ? ? ? ? rejecter:(RCTPromiseRejectBlock)reject){

? if(![WXApiisWXAppInstalled]) resolve(@NO);

? elseresolve(@YES);

}

RCT_EXPORT_MODULE(Wxpay);

@end

注意把universalLink替換成自己的,這個(gè)是短鏈接具體配置有專門的文章介紹,可以自行百度。

3.AppDelegate.h

#import

@class WeChatPayViewController;

@interface AppDelegate : UIResponder<UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) WeChatPayViewController *viewController;

@end

4.AppDelegate.m

引入:#import "WxpayModule.h"

添加如下方法

- (BOOL)application:(UIApplication*)applicationcontinueUserActivity:(NSUserActivity*)userActivityrestorationHandler:(void(^)(NSArray<id> *__nullablerestorableObjects))restorationHandler{

? ? NSURL*LinkUrl = userActivity.webpageURL;

? ? NSLog(@"linkurl == %@",LinkUrl);


? ? return [WXApi handleOpenURL:LinkUrl delegate: self];

? ? //do something..

//? ? return [WXApi handleOpenUniversalLink:userActivity delegate:[WXApiManager sharedManager]];//微信SDK1.8.6開始的 必須驗(yàn)證短鏈

//? ? return YES;

}

//支付回調(diào)9以前

- (BOOL)application:(UIApplication*)applicationhandleOpenURL:(NSURL*)url {

? return? [WXApi handleOpenURL:url delegate: self];

}

#pragma mark- wx callback

- (void)onReq:(BaseReq*)req

{

? // TODO Something

}

- (void)onResp:(BaseResp*)resp

{

? //判斷是否是微信支付回調(diào) (注意是PayResp 而不是PayReq)

? if ([resp isKindOfClass:[PayResp class]])

? {

? ? //發(fā)出通知 從微信回調(diào)回來之后,發(fā)一個(gè)通知,讓請(qǐng)求支付的頁面接收消息,并且展示出來,或者進(jìn)行一些自定義的展示或者跳轉(zhuǎn)

? ? NSNotification* notification = [NSNotificationnotificationWithName:@"WXPay"object:niluserInfo:@{@"errCode":@(resp.errCode)}];

? ? [[NSNotificationCenter defaultCenter] postNotification:notification];

? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容