相关教程:微信支付开发流程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) {
}];
}
复制代码
九、在点击方法中调用网络请求方法便可。