为什么我的7p都已经绑定微信更换绑定手机号了。想充值游戏的时候支付页面都没弹出来直接交易失败

查看: 43201|回复: 33
Android微信支付彻底扫坑
签到天数: 22 天连续签到: 1 天[LV.4]偶尔看看III主题帖子e币
没有eoe的账号,级别还太低,出门如何吹牛逼?
才可以下载或查看,没有帐号?
由于公司运营需要,Android客户端要增加微信支付。在看了几遍官方文档之后,加上之前有集成微信分享的经验,所以很快就把调用微信支付的代码写好了,待微信支付相关接口完成后联调时,才发现山高路远坑深啊!从下午2点半开始调试,一直折腾到快6点,那个微信支付界面才“千呼万唤始出来”,更坑爹的是,压根儿就不是我客户端的问题,而是后台接口那边sign生成时出了问题。在解决问题的过程中,看到网上太多关于微信支付各种问题的帖子,但遗憾的是并没有找到真正有效的解决方案,所以就来彻底扫一下Android集成微信支付中的坑。首先讲一下我们的逻辑,如微信支付开发文档(https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5)中Android部分描述的那样,由服务器端请求微信支付平台生成prepayid,大家一般也都是这么做的,发现网上有一部分人从服务器端拿到prepayid后,在客户端自己拼字符串参数,然后调用算法生成sign,这样是可以,但是安全性不好,而且客户端逻辑也变复杂了,估计大家是按照官方demo写的,至于其demo暂时就不评价了,下面会提及。我们的做法是所有的必要参数,如partnerId、prapayId、packageValue、nonceStr、timeStamp、sign等都是由服务器端生成,至于appId自己写在客户端也行,服务器端传过来也行,因为之前微信分享appId是写在客户端了,因此微信支付就没让服务器端返回appId这个参数。其实微信支付官方文档也是这样建议的,原文为“商户服务器生成支付订单,先调用统一下单API(详见第7节)生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付”。App端拿到上述6个主要参数后,加上appId,一共7个,就可以调起支付了。如上所述,客户端的逻辑就这么简单,所以当调试时竟然调不出支付界面,真觉得不可思议。我遇到的问题是这样的:当发起支付时调不出微信支付界面,直接响应WXPayEntryActivity中的onResp回调,并且errCode始终返回-1。如果微信未登录,则会调起登陆界面,登陆完成后还是调不起来,errCode依然返回-1。我们客户端的实现逻辑基本跟官方文档一致(注意官方文档有个书写错误,在调用支付部分代码最后一行的参数中,request写成了req,后面也会提到),主要核心代码如下:1.首先注册,其中api为IWXAPI的实例
[java] view plaincopy
api = WXAPIFactory.createWXAPI(context, APP_ID, false);&&api.registerApp(APP_ID);&&
2.从服务端拿到上述必要参数后,调支付即可,其中params是自定义的用来保存从服务端获取的所有的对象
[java] view plaincopy
if (api != null) {&&& & if (isWXAppInstalled()) {&&& && &&&PayReq req = new PayReq();&&& && &&&req.appId = APP_ID;&&& && &&&req.partnerId = params.getPartnerId();&&& && &&&req.prepayId = params.getPrepayId();&&& && &&&req.packageValue = params.getPackageValue();&&& && &&&req.nonceStr = params.getNonceStr();&&& && &&&req.timeStamp = params.getTimeStamp();&&& && &&&req.sign = params.getSign();&&&&& && &&&api.sendReq(req);&&& & }&&}&&
3.WXPayEntryActivity这个回调界面实际上不会影响前面的调起支付的逻辑,写过微信分享的应该知道,这个Activity一定要放到“App包名.wxapi”的package中,否则无法响应回调,当然别忘了在AndroidManifest.xml中注册。微信分享的回调WXEntryActivity也是这样的,放在同一个包即可。没错,微信就是这么霸道。
Android客户端的核心逻辑就是这些,下面来一一列举微信支付中的坑,或者叫注意点吧,有些是我知道因此没有亲自踩上去的也一并列出。1.首先如果要使用微信支付的话,必须先到微信开放平台注册应用,具体地址为https://open.weixin.qq.com/,注册时需要填应用的包名和签名,注意这里的签名是App正式版的签名,可以找一个已上线的包或打一个正式包,使用微信提供的工具(签名工具下载地址为https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk)来获取,获取后填上即可。待审核通过后,会得到一个AppID和AppSecret,AppID分享和支付都要用到,AppSecret没什么实际用途,此时微信分享能力是直接拥有的,支付能力还要额外申请,其中涉及到财务信息等,最好让公司财务部门去申请,申请成功后会拿到一个商户id,后面生成sign时会用到。只有所有审核都通过后,才可调用微信支付功能,这点是前提。2.微信分享和微信支付SDK是同一个架包,名为libammsdk.jar。3.官方开发文档中有一处错误,需要注意下,如下图最后一行参数req应该为request,照搬代码的估计IDE也不会放过你,哈哈。
4.测试微信支付时,务必对自己的App做正式签名,因为一开始就在微信平台注册过签名信息,微信SDK会做校验,只有这样才能调起微信分享和微信支付,直接debug版的包则绝对调不起来,这点务必注意,很多人是跌在这里了!当初做微信分享曾遇到过,所以会很留心,也因为如此,如果微信分享能调起来,微信支付不行,那就不要怀疑签名问题了。5.还是签名,网上有人说要注意大小写,这点其实是不必的。在微信开放平台看到审核通过的App的签名是大写的,而用微信签名获取工具获得的则显示小写,这个没关系,不要贸然改动平台注册信息,不然又可能导致漫长的审核等待,上面也说了,微信分享如可以,那就不是签名问题。6.来说下官方demo,这东西害人不浅啊!很多人参考其写法,如生成sign放在客户端啊,调支付的Activity添加intent-filter啊,最主要的还是签名问题。其实客户端逻辑很简单,直接上手集成即可,demo看看逻辑就行,照抄小心掉坑里。7.网上有人说需要给调用支付的Activity配置如下intent-filter(见下图),可能也是被demo误导了
[html] view plaincopy
&intent-filter&&&& & &action android:name=&android.intent.action.VIEW&/&&&& & &category android:name=&android.intent.category.DEFAULT&/&&&& & &data android:scheme=&appid&/&&&&/intent-filter&&&
逻辑上来看,根本不会跳这个界面啊,所以当然是非必需的。8.对于errCode返回-1,有人说清除微信缓存或切换账户就好了,这种解决方案治标不治本啊,根本不能算解决方案。虽然我没遇到能用这方法解决的问题,但目测是签名的问题,建议还得找到真正的问题所在。9.生成sign时特别需要注意,首先将key-value键值对拼成字符串,注意key都要小写,如appid,noncestr,package,partnerid,prepayid,timestamp,key,并且名字得按上述名称,我们遇到的错误就是因为partnerid写成了partnerId,prepayid写成了PrepayId,当然我们是在服务端写的,如果在客户端生成sign的话,也需要注意大小写及名称,详细信息请参考官方文档。还有这里的key并非AppID或AppSectet,而是在商户平台设置的,官方描述为“key设置路径:微信商户平台(pay.weixin.qq.com)--&账户设置--&API安全--&密钥设置”。对于noncestr,申请prepayid和生成sign时两次需要用到,由于iOS同事看到相关文章说noncestr前后需要一致,因此这个随机字符串我们是设置成一样的了,这样做Android平台也是OK的,不过个人感觉这里可以不一致,由于这个逻辑在服务器端,我并没有验证,方便的同学可以验证下。10.req.packageValue=”Sign=WXPay”,一般都是这样写死这个参数值。也有人说写成req.packageValue=”prepay_id=” + prepayid,经测试Android两种写法都是可以调起微信支付的,至少最新版本SDK是可以的,以后则不清楚,官方也建议写Sign=WXPay,据说iOS只支持这种写法。11.对于IWXAPI实例的创建,官方代码为: IWXAPI api = WXAPIFactory.createWXAPI(context, null);这样写就可以,如果调用另一个工厂方法:IWXAPI api = WXAPIFactory.createWXAPI(context, APP_ID, false);也是OK的,我都测试过,总之这里不是问题的根源。不得不再次吐槽一下Android微信支付,支付宝之类的支付集成是很简单的,微信支付却花了几个小时才搞定,上面罗列了一系列注意事项,都是前人踩过的坑,希望大家看到这篇文章后,可以用20分钟搞定微信支付,如果还有问题,欢迎回复探讨。
原文可以参考个人CSDN博客:http://blog.csdn.net/ahence/article/details/
上海酒店***,足不出户就能体验高品味享受,我们全天候准备为您服务!使您全身活力再现!把轻松`舒适`和快乐带给您!官网taosilespa.com电话/微信1:微信2:shanmo12580,务必同时加,qq:806 &
本帖被以下淘专辑推荐:
& |主题: 10, 订阅: 2
签到天数: 22 天连续签到: 1 天[LV.4]偶尔看看III主题帖子e币
楼主,查询订单,你们用的是你们的订单号,还是微信的订单号,客户端需要轮询什么的吗 ...
这个是服务端做的,具体不太清楚。不过订单应该是在自己服务器的,微信订单只不过是中间一个支付凭证,应该还是用自己服务器为每一笔交易生成的订单号
<div class="piOS- 微信支付 (服务器调起支付 )以及回调不成功的原因
不看后悔 - iOS_满聪 - 博客园
想要源码的朋友,可以留下QQ邮箱.
posts - 82, comments - 29, trackbacks - 0, articles - 0
写的不错,给留个言哈...
一. 支付准备工作
1. 微信相关准备工作
(1) 向微信官方开通支付功能. 这个不是前端的工作.
(2) 导入官方下载的微信支付SDK包. 我用的是微信开放平台下载的SDK 1.6.2
(3) 导入必要的库文件
& & &SystemConfiguration.framework,
& & &libz.dylib,
& & &libsqlite3.0.dylib,
& & &libc++.dylib,
& & &CoreTelephoy.framework (坑一: 这个库是必要的,但是微信官方文档中没有说到要导入)
(4) 该项目中的Bundle Identifier 应该填向微信注册的Bundle Identifier
(5) 注册微信 (回调的时候用到,告诉微信,从微信返回到哪个APP)
& & &Target --& info --& URL Types --& +按钮 --& 填写identifier 和 URL&Schemes. 前一个是标识符,一般填@"weixin".后一个是注册的微信appId. 比如"wx19a984b788a8a0b1".(注释: 假的appid)
(6) 添加微信白名单
& & &info.plist --& 右击 --& open as &--& source Code --& 添加白名单
& & &我是在&key&CFBundleVersion&/key&这一行上面添加的. 注意保持正确的键值对.别插错了.
&key&LSApplicationQueriesSchemes&/key&
&string&wechat&/string&
&string&weixin&/string&
(7) 如果支付成功,回调方法不执行,或者回调不成功.请再次确认(4)(5)(6),是否填写正确.&
(8) 运行一下,不报错.报错,再次确认(1)--(7)步骤.
二.代码相关
1. 在AppDelegate.h中
(1) 导入微信类 #import @"WXApi.h".
(2) 遵守微信代理方法 &WXApiDelegate&
2. 在APPDelegate.m中
(1) 注册微信
#pragma mark 注册微信
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
//注册 微信
参数1 : 微信Appid
参数2 : 对项目的描述信息(用项目名称)
[WXApi registerApp:@"微信Appid" withDescription:@"云宴"];
return YES;
&(2) 跳转方法,并设置代理
#pragma mark 跳转处理
//被废弃的方法. 但是在低版本中会用到.建议写上
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
return [WXApi handleOpenURL:url delegate:self];
//被废弃的方法. 但是在低版本中会用到.建议写上
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
return [WXApi handleOpenURL:url delegate:self];
//新的方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary&NSString *,id& *)options
return [WXApi handleOpenURL:url delegate:self];
(3) 微信回调方法 (注意: 不要写成Req方法了)
#pragma mark 微信回调方法
- (void)onResp:(BaseResp *)resp
NSString * strMsg = [NSString stringWithFormat:@"errorCode: %d",resp.errCode];
NSLog(@"strMsg: %@",strMsg);
NSString * errStr
= [NSString stringWithFormat:@"errStr: %@",resp.errStr];
NSLog(@"errStr: %@",errStr);
NSString * strT
//判断是微信消息的回调 --& 是支付回调回来的还是消息回调回来的.
if ([resp isKindOfClass:[SendMessageToWXResp class]])
strTitle = [NSString stringWithFormat:@"发送媒体消息的结果"];
NSString * wxPayR
//判断是否是微信支付回调 (注意是PayResp 而不是PayReq)
if ([resp isKindOfClass:[PayResp class]])
//支付返回的结果, 实际支付结果需要去微信服务器端查询
strTitle = [NSString stringWithFormat:@"支付结果"];
switch (resp.errCode)
case WXSuccess:
strMsg = @"支付结果:";
NSLog(@"支付成功: %d",resp.errCode);
wxPayResult = @"success";
case WXErrCodeUserCancel:
strMsg = @"用户取消了支付";
NSLog(@"用户取消支付: %d",resp.errCode);
wxPayResult = @"cancel";
strMsg = [NSString stringWithFormat:@"支付失败! code: %d
errorStr: %@",resp.errCode,resp.errStr];
NSLog(@":支付失败: code: %d str: %@",resp.errCode,resp.errStr);
wxPayResult = @"faile";
//发出通知 从微信回调回来之后,发一个通知,让请求支付的页面接收消息,并且展示出来,或者进行一些自定义的展示或者跳转
NSNotification * notification = [NSNotification notificationWithName:@"WXPay" object:wxPayResult];
[[NSNotificationCenter defaultCenter] postNotification:notification];
&3. 在ViewController.h (进行支付请求的类)
&暂时没有任何操作
4. 在ViewController.m中(进行支付的请求的类)
(1) 导入微信库 #import @"WXApi.h"
(2) 监听APPDelegate.m中发送的通知
#pragma mark 监听通知
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:YES];
//检测是否装了微信软件
if ([WXApi isWXAppInstalled])
//监听通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getOrderPayResult:) name:@"WXPay" object:nil];
#pragma mark - 事件
- (void)getOrderPayResult:(NSNotification *)notification
NSLog(@"userInfo: %@",notification.userInfo);
if ([notification.object isEqualToString:@"success"])
UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"提示信息" message:@"支付成功" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alertView show];
[self alert:@"提示" msg:@"支付失败"];
//客户端提示信息
- (void)alert:(NSString *)title msg:(NSString *)msg
UIAlertView *alter = [[UIAlertView alloc] initWithTitle:title message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alter show];
(3) 移除通知
#pragma mark 移除通知
- (void)dealloc {
//移除通知
[[NSNotificationCenter defaultCenter] removeObserver:self];
(4) 调起微信去支付
- (void)viewDidLoad
[super viewDidLoad];
[self pay_button];
#pragma mark - 实现方法
#pragma mark 创建支付按钮
- (void)pay_button
self.payButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.payButton.frame = CGRectMake(10, 100, 300, 40);
self.payButton.backgroundColor = [UIColor orangeColor];
[self.payButton setTitle:@"去支付" forState:UIControlStateNormal];
[self.payButton addTarget:self action:@selector(payButtonClicked) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.payButton];
#pragma mark - 点击事件
- (void)payButtonClicked
[self sendNetWorking_WXPay];
- (void)sendNetWorking_WXPay
NSString * urlStr = [NSString stringWithFormat:@"%@%@",YYIP,@"wx/pay"];
NSDictionary * parameter = @{
@"pay_type"
@"total_price"
@"appointment_id" : @"208"
[self sendNetWorkingWith:urlStr andParameter:parameter];
#pragma mark 网络请求 --&& post
- (void)sendNetWorkingWith:(NSString *)url andParameter:(NSDictionary *)parameter
AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];
[manager POST:url parameters:parameter progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id
_Nullable responseObject) {
NSLog(@"%@",responseObject);
//网络请求回来的8个参数.详见微信开发平台
NSDictionary * result = responseObject[@"result"];
NSString * appid
= result[@"appid"];
NSString * noncestr
= result[@"noncestr"];
NSString * package1
= result[@"package1"];
NSString * partnerid
= result[@"partnerid"];
NSString * paySign
= result[@"paySign"];
NSString * prepayid
= result[@"prepayid"];
NSString * timestamp
= result[@"timestamp"];
NSString * err_code
= result[@"err_code"];
NSString * timeStamp
= result[@"timeStamp"];
NSString * tradeid
= result[@"tradeid"];
[self WXPayRequest:appid nonceStr:noncestr package:package1 partnerId:partnerid prepayId:prepayid timeStamp:timestamp sign:paySign];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error);
#pragma mark - 调起微信支付
- (void)WXPayRequest:(NSString *)appId nonceStr:(NSString *)nonceStr package:(NSString *)package partnerId:(NSString *)partnerId prepayId:(NSString *)prepayId timeStamp:(NSString *)timeStamp sign:(NSString *)sign{
//调起微信支付
PayReq* wxreq
= [[PayReq alloc] init];
wxreq.openID
= appId; // 微信的appid
wxreq.partnerId
= partnerId;
wxreq.prepayId
= prepayId;
wxreq.nonceStr
wxreq.timeStamp
= [timeStamp intValue];
wxreq.package
wxreq.sign
[WXApi sendReq:wxreq];
1. AppDelegate.h
#import &UIKit/UIKit.h&
#import "WXApi.h"
@interface AppDelegate : UIResponder &UIApplicationDelegate,WXApiDelegate&
@property (strong, nonatomic) UIWindow *
2. AppDelegate.m
#import "AppDelegate.h"
@interface AppDelegate ()
@implementation AppDelegate
#pragma mark 注册微信
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
//注册 微信
参数1 : 微信Appid
参数2 : 对项目的描述信息(用项目名称)
[WXApi registerApp:@"wx09a984b788a8a0b0" withDescription:@"云宴"];
return YES;
#pragma mark 跳转处理
//被废弃的方法. 但是在低版本中会用到.建议写上
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
return [WXApi handleOpenURL:url delegate:self];
//被废弃的方法. 但是在低版本中会用到.建议写上
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
return [WXApi handleOpenURL:url delegate:self];
//新的方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary&NSString *,id& *)options
return [WXApi handleOpenURL:url delegate:self];
#warning 这一步中
不要错误的把req 当成了 resp
#pragma mark 微信回调方法
- (void)onResp:(BaseResp *)resp
NSString * strMsg = [NSString stringWithFormat:@"errorCode: %d",resp.errCode];
NSLog(@"strMsg: %@",strMsg);
NSString * errStr
= [NSString stringWithFormat:@"errStr: %@",resp.errStr];
NSLog(@"errStr: %@",errStr);
NSString * strT
//判断是微信消息的回调
if ([resp isKindOfClass:[SendMessageToWXResp class]])
strTitle = [NSString stringWithFormat:@"发送媒体消息的结果"];
NSString * wxPayR
//判断是否是微信支付回调 (注意是PayResp 而不是PayReq)
if ([resp isKindOfClass:[PayResp class]])
//支付返回的结果, 实际支付结果需要去微信服务器端查询
strTitle = [NSString stringWithFormat:@"支付结果"];
switch (resp.errCode)
case WXSuccess:
strMsg = @"支付结果:";
NSLog(@"支付成功: %d",resp.errCode);
wxPayResult = @"success";
case WXErrCodeUserCancel:
strMsg = @"用户取消了支付";
NSLog(@"用户取消支付: %d",resp.errCode);
wxPayResult = @"cancel";
strMsg = [NSString stringWithFormat:@"支付失败! code: %d
errorStr: %@",resp.errCode,resp.errStr];
NSLog(@":支付失败: code: %d str: %@",resp.errCode,resp.errStr);
wxPayResult = @"faile";
//发出通知
NSNotification * notification = [NSNotification notificationWithName:@"WXPay" object:wxPayResult];
[[NSNotificationCenter defaultCenter] postNotification:notification];
3. ViewController.h
#import &UIKit/UIKit.h&
@interface ViewController : UIViewController
4. ViewController.m
#import "ViewController.h"
#import "AFHTTPSessionManager.h"
#import "WXApi.h"
#define YYIP
@"http:公司IP地址"
@interface ViewController ()
@property (nonatomic, strong) UIButton * payB
@implementation ViewController
#pragma mark 监听通知
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:YES];
//检测是否装了微信软件
if ([WXApi isWXAppInstalled])
//监听通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getOrderPayResult:) name:@"WXPay" object:nil];
#pragma mark 移除通知
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:YES];
//移除通知
[[NSNotificationCenter defaultCenter] removeObserver:self];
- (void)viewDidLoad
[super viewDidLoad];
[self pay_button];
#pragma mark - 实现方法
#pragma mark 创建支付按钮
- (void)pay_button
self.payButton = [UIButton buttonWithType:UIButtonTypeCustom];
self.payButton.frame = CGRectMake(10, 100, 300, 40);
self.payButton.backgroundColor = [UIColor orangeColor];
[self.payButton setTitle:@"去支付" forState:UIControlStateNormal];
[self.payButton addTarget:self action:@selector(payButtonClicked) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.payButton];
#pragma mark - 点击事件
- (void)payButtonClicked
& & if ([WXApi isWXAppInstalled])
& & & [self sendNetWorking_WXPay];
& & & [self alert:@"提示" msg:@"未安装微信"];
- (void)sendNetWorking_WXPay
NSString * urlStr = [NSString stringWithFormat:@"%@%@",YYIP,@"wx/pay"];
NSDictionary * parameter = @{
@"pay_type"
@"total_price"
@"appointment_id" : @"208"
[self sendNetWorkingWith:urlStr andParameter:parameter];
#pragma mark 网络请求 --&& post
- (void)sendNetWorkingWith:(NSString *)url andParameter:(NSDictionary *)parameter
AFHTTPSessionManager * manager = [AFHTTPSessionManager manager];
[manager POST:url parameters:parameter progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id
_Nullable responseObject) {
NSLog(@"%@",responseObject);
//网络请求回来的8个参数.详见微信开发平台
NSDictionary * result = responseObject[@"result"];
NSString * appid
= result[@"appid"];
NSString * noncestr
= result[@"noncestr"];
NSString * package1
= result[@"package1"];
NSString * partnerid
= result[@"partnerid"];
NSString * paySign
= result[@"paySign"];
NSString * prepayid
= result[@"prepayid"];
NSString * timestamp
= result[@"timestamp"];
NSString * err_code
= result[@"err_code"];
NSString * timeStamp
= result[@"timeStamp"];
NSString * tradeid
= result[@"tradeid"];
[self WXPayRequest:appid nonceStr:noncestr package:package1 partnerId:partnerid prepayId:prepayid timeStamp:timestamp sign:paySign];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error);
#pragma mark - 调起微信支付
- (void)WXPayRequest:(NSString *)appId nonceStr:(NSString *)nonceStr package:(NSString *)package partnerId:(NSString *)partnerId prepayId:(NSString *)prepayId timeStamp:(NSString *)timeStamp sign:(NSString *)sign{
//调起微信支付
PayReq* wxreq
= [[PayReq alloc] init];
wxreq.openID
= appId; // 微信的appid
wxreq.partnerId
= partnerId;
wxreq.prepayId
= prepayId;
wxreq.nonceStr
wxreq.timeStamp
= [timeStamp intValue];
wxreq.package
wxreq.sign
[WXApi sendReq:wxreq];
#pragma mark - 事件
- (void)getOrderPayResult:(NSNotification *)notification
NSLog(@"userInfo: %@",notification.userInfo);
if ([notification.object isEqualToString:@"success"])
UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"提示信息" message:@"支付成功" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
[alertView show];
else if([notification.object isEqualToString:@"cancel"])
[self alert:@"提示" msg:@"用户取消了支付"];
[self alert:@"提示" msg:@"支付失败"];
//客户端提示信息
- (void)alert:(NSString *)title msg:(NSString *)msg
UIAlertView *alter = [[UIAlertView alloc] initWithTitle:title message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alter show];

我要回帖

更多关于 微信可以绑定信用卡吗 的文章

 

随机推荐