- 借助于前幾天項目剛剛上線,也在此繼續分享下銀聯支付的相關方法和總結。本次分享的為支持純無卡交易。
- 鑒于上兩次的支付分享,本次所做的內容比較簡單,簽名工作移到了后臺進行,前端所做的工作非常少,只需要往后臺POST過去商品價格,后臺對訂單進行相應的簽名,返回簽名后的tn字符串即可。
1.事前準備工作
- 添加工程所需的銀聯支付(iOS)SDK,如下圖:
導入工程中的SDK
2. 開發流程
- 導入頭文件
#import "UPPayPlugin.h"
以及設置代理<UPPayPluginDelegate>
- 觸發喚起銀聯支付的方法(本次對訂單的簽名處理都在后臺進行,在此附上后臺銀聯支付SDK)。
#pragma mark - 銀聯支付相關方法
- (IBAction)yinlianPayAct {
NSString *strUrl = [NSString stringWithFormat:@"%@/App/Index/index/",SERVERURL]; //從后臺獲取tn字符串的API地址
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"money"] = payCount; // 支付金額
[LXHttpTool post:strUrl params:params success:^(id json) {
LXLog(@"%@", json);
NSString *tnStr = [NSString stringWithFormat:@"%@", json[@"tn"]];
if (tnStr) {
[UPPayPlugin startPay:tnStr mode:@"00" viewController:self delegate:self];
} else {
[MBProgressHUD showError:json[@"error"]];
}
} failure:^(NSError *error) {
LXLog(@"請求失敗-%@", error);
}];
}
注:
mode:@"00"
為正式版本支付模式,mode:@"01"
為測試版本支付模式,官方給的有測試賬號,如下圖:
截圖來自銀聯iOS開發指南
- 設置回調方法,對支付結果進行相應操作,后臺數據相應的加減
#pragma mark - UPPayPluginDelegate
-(void)UPPayPluginResult:(NSString*)result {
LXLog(@"%@", result);
if ([result isEqual:@"success"]) {
[self pay_success]; // 銀聯支付成功之后,往后臺發送相應訂單數據的方法。
} else if ([result isEqual:@"fail"]) {
[MBProgressHUD showError:@"支付失敗"];
} else {
[MBProgressHUD showError:@"您已取消支付"];
}
}
注:支付成功后,往后臺發送數據是必需的,對后臺數據進行相應的更新。
3. 總結
- 對于以上分享的支付方法,仔細琢磨一下,發現有漏洞。通過第三方支付,如果支付成功返回App之后,此時網絡突然出現問題,不能往后臺正常發送相應數據,導致后臺數據更新不了,可是銀子已經扣過,這不是要掛的節奏么(求高人指點,如何避免此種BUG)。
- 鑒于上個項目中各種單個支付方法,太過累贅,對于目前開發的項目啟用Ping++支付方法,度娘解釋:Ping++ 是上海簡米網絡科技有限公司旗下的移動支付 SDK 產品,整合了目前市面上各種支付渠道。
- Ping++支付分享,待續...