相關教程:微信支付開發流程git
一直到設置URL Scheme,均按照步驟進行。下面的內容將做爲筆記着重介紹:github
註冊APPID步驟1~3:bash
在AppDelegate.m中服務器
一、導入#import "WXApi.h"
微信
二、繼承<WXApiDelegate>
網絡
三、在app
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {}
複製代碼
中向微信終端註冊ID:[WXApi registerApp:@"wx7588a96585cd8751"];
微信支付
須要注意的是:其中@"wx7588a96585cd8751"
爲URL Type中的ui
四、在支付成功以後,支付結果返回,須要獲取url,也須要在Appdelegate中完成,代碼以下:編碼
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
if([url.host isEqualToString:@"pay"]){
//處理微信的支付結果
[WXApi handleOpenURL:url delegate:self];
return YES;
}else{
// 友盟回調
return [self UMapplication:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{
//微信
if([url.host isEqualToString:@"pay"]){
//處理微信的支付結果
[WXApi handleOpenURL:url delegate:self];
return YES;
}else{
//友盟
return [[UMSocialManager defaultManager] handleOpenURL:url options:options];
}
}
複製代碼
兩個方法中都要寫,才能適用舊版本和新版本.
五、微信SDK自帶的方法,處理從微信客戶端完成操做後返回程序以後的回調方法,顯示支付結果的:(直接copy過來使用便可)
// 微信顯示支付結果
-(void) onResp:(BaseResp*)resp
{
//啓動微信支付的response
NSString *payResoult = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
if([resp isKindOfClass:[PayResp class]]){
//支付返回結果,實際支付結果須要去微信服務器端查詢
switch (resp.errCode) {
case 0:
payResoult = @"支付結果:成功!";
break;
case -1:
payResoult = @"支付結果:失敗!";
break;
case -2:
payResoult = @"用戶已經退出支付!";
break;
default:
payResoult = [NSString stringWithFormat:@"支付結果:失敗!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
break;
}
}
}
複製代碼
六、建立model,內容爲後臺返回參數,固定格式,但要注意返回參數和微信服務器端返回字段的一一對應,
@property (nonatomic, copy) NSString *appid;
@property (nonatomic, copy) NSString *noncestr;
@property (nonatomic, copy) NSString *packageStr;
@property (nonatomic, copy) NSString *partnerid;
@property (nonatomic, copy) NSString *prepayId;
@property (nonatomic, copy) NSString *sign;
@property (nonatomic, copy) NSString *signType;
@property (nonatomic, copy) NSString *timestamp;
複製代碼
七、在調用的控制器中,繼承model,建立帶參數的支付方法,(帶參數是爲了將後臺返回的參數傳給調用微信支付方法),內容也是固定格式的,只是右邊的值須要對應修改:
#pragma mark 微信支付方法
- (void)WechatPay:(ABWechatRechargeModel *)model{
//須要建立這個支付對象
PayReq *req = [[PayReq alloc] init];
//由用戶微信號和AppID組成的惟一標識,用於校驗微信用戶
req.openID = model.appid;
// 商家id,在註冊的時候給的
req.partnerId = model.partnerid;
// 預支付訂單這個是後臺跟微信服務器交互後,微信服務器傳給大家服務器的,大家服務器再傳給你
req.prepayId = model.prepayId;
// 根據財付通文檔填寫的數據和簽名
req.package = model.packageStr;
// 隨機編碼,爲了防止重複的,在後臺生成
req.nonceStr = model.noncestr;
// 這個是時間戳,也是在後臺生成的,爲了驗證支付的
NSString * stamp = model.timestamp;
req.timeStamp = stamp.intValue;
// 這個簽名也是後臺作的
req.sign = model.sign;
//發送請求到微信,等待微信返回onResp
[WXApi sendReq:req];
}
複製代碼
八、在網絡請求方法中,調用微信支付方法,並傳返回值:
#pragma mark - request
- (void)WechatPay{
WS(weakself);
NSMutableDictionary *dict = @{}.mutableCopy;
[dict setValue:self.topupView.sumTextField.text forKey:@"total"];
[LWNetWorkManager requestWithMethod:GET Url:KWeChatRecharge Parameters:dict success:^(id responseObject) {
[weakself WechatPay:[ABWechatRechargeModel modelWithJSON:responseObject]];
} requestRrror:^(id requestRrror) {
}];
}
複製代碼
九、在點擊方法中調用網絡請求方法便可。