博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发日记3-微信支付
阅读量:5143 次
发布时间:2019-06-13

本文共 2556 字,大约阅读时间需要 8 分钟。

今天博主有一个微信支付的需求,遇到了一些困难点,在此和大家分享,希望能够共同进步.

1.申请AppID,导入依赖库,配置URL Scheme这里就不深究了,各位看官请自行百度.

2.在AppDelegate中导入头文件,遵守WXApiDelegate,然后在launch里注册AppID.

3.在支付界面导入头文件,创建支付对象,调起微信

//调起微信支付,传入参数

PayReq* req = [[[PayReq alloc] init]autorelease];

req.openID = APPI_ID;

req.partnerId = PARTNER_ID;

req.prepayId = prePayid;

req.nonceStr = nonce_str;

req.timeStamp = now;

req.package = package;

req.sign = sign;

[WXApi safeSendReq:req];

4.微信支付的回调需要添加在AppDelegate中

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

{

 

     //返回应用后的回调,通过handleOpenURL进入微信支付的回调onResp:(BaseResp*)resp

         return [WXApi handleOpenURL:url delegate:self];

}

-(void) onResp:(BaseResp*)resp

{

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

{

PayResp *response = (PayResp *)resp;

NSString *strTitle = [NSString stringWithFormat:@"支付结果"];

NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", response.errCode];

 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitlemessage:strMsg  delegate:self cancelButtonTitle:@"OK"  otherButtonTitles:nil, nil];

[alert show];

switch (response.errCode) {

case WXSuccess: {

NSNotification *notification = [NSNotification notificationWithName:ORDER_PAY_NOTIFICATION object:@"success"];

[[NSNotificationCenter defaultCenter] postNotification:notification];

break;

}

default: {

NSNotification *notification = [NSNotification notificationWithName:ORDER_PAY_NOTIFICATION object:@"fail"];

[[NSNotificationCenter defaultCenter] postNotification:notification];

break;

}

}

}

}

但是将微信支付相关的代码全部写到AppDelegate中又会显得代码冗余,这时我们需要创建通知,在成功回调后发出通知,在支付界面监听回调,完成支付.

5.在监听回调中,上传我们从微信支付中获得的参数,完成支付.

 

6.输入支付金额时,限制首个输入不为0

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {

    NSString *result = [textField.text stringByReplacingCharactersInRange:range withString:string];

    if (result.length == 0) return YES;

    NSString *regex = @"^[1-9][0-9]*$";

    NSPredicate *prd = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regex];

    return [prd evaluateWithObject:result];

}

 

http://www.jianshu.com/p/97d38b00e53d?plg_nld=1&plg_auth=1&plg_nld=1&plg_dev=1&plg_uin=1&plg_usr=1&plg_vkey=1&plg_nld=1&plg_uin=1&plg_nld=1&plg_auth=1&plg_usr=1&plg_vkey=1&plg_dev=1

 

http://www.tuicool.com/articles/32UFBzQ?plg_nld=1&plg_uin=1&plg_auth=1&plg_nld=1&plg_usr=1&plg_vkey=1&plg_dev=1

 

http://www.jianshu.com/p/6e75a450dcc4?plg_nld=1&plg_uin=1&plg_auth=1&plg_nld=1&plg_usr=1&plg_vkey=1&plg_dev=1

转载于:https://www.cnblogs.com/Twisted-Fate/p/4733020.html

你可能感兴趣的文章
测试用例覆盖率converage
查看>>
extjs xtype 类型
查看>>
FileUpload控件的使用
查看>>
ROS知识(3)----功能包package编译的两种方式
查看>>
vim编辑器
查看>>
tomcat 防火墙如何设置
查看>>
JS 控件 位置和对齐
查看>>
理解响应式编程
查看>>
【原创】大叔经验分享(67)spring boot启动报错
查看>>
HDU 6081 度度熊的王国战略(全局最小割堆优化)
查看>>
C#开发Android步骤
查看>>
PHP安全笔记
查看>>
C++标准库string类型学习笔记
查看>>
Objective-c粒子动画
查看>>
ubuntu16.04+Titan Xp安装显卡驱动+Cuda9.0+cudnn
查看>>
WR调用windows的API实现文本框数据输入
查看>>
多线程BackroundWorker 使用
查看>>
yum和apt-get用法及区别
查看>>
hdu 5877 Weak Pair dfs序+树状数组+离散化
查看>>
个人阅读作业总结
查看>>