前面寫了2篇關(guān)于支付寶政溃、微信支付后的傳值問題,這個(gè)主要是關(guān)于支付寶态秧、微信支付(成功或失敗等傳值給web頁(yè)H5)董虱。
這里用是的蘋果原生和JS的交互 、有不明白JavaScriptCore框架的可以去網(wǎng)上搜索下這方面的資料很多
廢話不多說直接上代碼
@protocol JSContextDelegate <JSExport>
//這里面寫H5申鱼,也就是網(wǎng)頁(yè)端定義的方法
- (void)isLogin;//如判斷用戶有沒有登錄
@end
@interface HtmlShopingViewController ()< JSContextDelegate>
@property (nonatomic, strong) UIWebView *mainWebView;
@property (nonatomic, strong) JSContext *jsContext;
//支付寶返回的狀態(tài)碼
@property (nonatomic ,strong)NSString * alipayCode;
//微信返回的狀態(tài)碼
@property (nonatomic ,strong)NSString * wxCode;
//點(diǎn)擊系統(tǒng)左上角的返回app的狀態(tài)碼愤诱,這里隨便給一個(gè)值,前提是你和H5端商量好的值
@property (nonatomic, strong) NSString *backCode
@end
- (void)viewDidLoad {
[super viewDidLoad];
self.alipayCode = @"";//給初始值
self.wxCode = @"";//給初始值
self.backCode = @"";//給初始值
}
接著在webview的代理方法中寫
- (void)webViewDidFinishLoad:(UIWebView *)webView{
self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
self.jsContext[@"填H5端的方法名(如abc. 方法名捐友,取abc)"] = self;
//也就是填的 self.jsContext[@"abc"]
self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
context.exception = exceptionValue;
NSLog(@"異常信息:%@", exceptionValue);
};
if (![self.alipayCode isEqualToString:@""]) {//表示有值
NSString *alipayCodeJS=[NSString stringWithFormat:@"h5端的方法名('%@')",self.alipayCode]; //準(zhǔn)備執(zhí)行的js代碼
[self.jsContext evaluateScript: alipayCodeJS];//通過oc方法調(diào)用js的alert
self.alipayCode = @""; //給回空值
}
}
微信的和系統(tǒng)返回鍵的值同理淫半、這里就只寫支付寶 怎么傳值可以參考http://www.reibang.com/p/2536a7d689a5
#pragma mark - 支付寶支付后接收的值(狀態(tài)碼)
- (void)aliPayReslut:(NSNotification *)notfication {
self.alipayCode = notfication.userInfo[@"resultStatus"];//支付寶的傳回來(lái)的值
[self.mainWebView reload];//刷新WebView
}
支付寶在傳值的時(shí)候需要注意一下
上面的是在手機(jī)上安裝了支付寶客戶端,沒有安裝客戶端的情況就需要在支付寶在沒有客戶端的時(shí)候傳回狀態(tài)碼的地方調(diào)用
//此方法只在沒有支付寶客戶端的時(shí)候傳支付的狀態(tài)碼
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
self.alipayCode = resultDic[@"resultStatus"];
[self.mainWebView reload];
}];
最后在寫一個(gè)在支付過程中直接點(diǎn)擊左上角的返回App的處理
當(dāng)點(diǎn)擊左上角返回App的時(shí)候回調(diào)用AppDelegate.h用的這個(gè)方法
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
[[NSNotificationCenter defaultCenter]postNotificationName:@"resumeBack" object:nil userInfo:nil];
}
上面同和支付寶一樣的傳值給H5端匣砖,進(jìn)行界面跳轉(zhuǎn)處理科吭。OK寫到這里就搞定了支付寶、微信回調(diào)傳值給H5網(wǎng)頁(yè)猴鲫,寫的不好莫怪砌溺。