app ios 回调 微信支付
2015-10-28 11:32:00 weixin_34204057 阅读数 13

微信支付分为好几种,这里记录的是app微信支付流程。

适用场景

用户使用xxAPP时,需要通过微信支付完成某项报名。此时xxAPP调用微信提供的SDK调用微信支付模块,接着xxAPP跳转到微信支付页面,由客户完成支付,支付完成后跳回到xxAPP页面,显示支付结果。

APP端开发步骤如下:

1.在xxAPP工程里设置APPID

商家在微信开放平台申请开发app应用后,微信开放平台会生成该app的唯一标识appId。在xcode中设置sppId步骤

xxAPP-->info-->URL Types-->URL Schemes-->输入商户自己的appId。

2.注册appId

在xxAPP工程中引入微信lib库和头文件,调用微信的api之前,需要先向微信注册商家的appId,代码如下

[WXApi registerApp:@"商家appId" withDescription:nil];

3.调用支付

用户在使用xxApp完成支付功能时,商家服务器会生成支付订单,先调用微信的【统一下单API】生成预付单,获取到prepay_id后将参数再次签名传输给app发起支付。调用支付的关键代码如下:

PayReq *request = [[PayReq alloc] init];

request.partnerId = @"商户号";

request.prepayId= @"预支付交易会话ID";

request.package = @"Sign=WXPay";

request.nonceStr= @"随机字符串";

request.timeStamp= @"时间戳";

request.sign= @"签名";

[WXApi sendReq:request];

4.支付结果回调

参照微信SDK

Sample,实现onResp方法、完成支付后,微信app会返回到商家app页面,并且回调onResp函数,开发者需要在该方法中接收通知,判断返

回码,如果支付成功则去后台查询支付结果再展示给用户实际支付结果。注意:不能以客户端取到的钱数作为用户支付结果,应该以服务器端接收到的支付通知或查

询API返回的结果为准。代码示例如下:

-(void)onResp:(BaseResp*)resp

{

if ([respisKindOfClass:[PayRespclass]])

{

PayResp*response=(PayResp*)resp;

switch(response.errCode)

{

case 0:

//服务器端查询支付通知或查询API返回的结果再提示成功

NSlog(@"支付成功");

break;

default:

NSlog(@"支付失败,retcode=%d",resp.errCode);

break;

}}}

回调中errCode值列表

0      成功

-1     失败

-2     用户取消

2015-11-17 16:18:58 dong_vip 阅读数 609

最近做工程时,app需要用到微信支付,通过看官方文档,记录下这次开发的过程。

微信支付分为好几种,这里记录的是app微信支付流程。

适用场景

用户使用xxAPP时,需要通过微信支付完成某项报名。此时xxAPP调用微信提供的SDK调用微信支付模块,接着xxAPP跳转到微信支付页面,由客户完成支付,支付完成后跳回到xxAPP页面,显示支付结果。

APP端开发步骤如下:

1.在xxAPP工程里设置APPID

商家在微信开放平台申请开发app应用后,微信开放平台会生成该app的唯一标识appId。在xcode中设置sppId步骤

xxAPP–>info–>URL Types–>URL Schemes–>输入商户自己的appId。

2.注册appId

在xxAPP工程中引入微信lib库和头文件,调用微信的api之前,需要先向微信注册商家的appId,代码如下

[WXApi registerApp:@"商家appId" withDescription:nil];

3.调用支付

用户在使用xxApp完成支付功能时,商家服务器会生成支付订单,先调用微信的统一下单API】生成预付单,获取到prepay_id后将参数再次签名传输给app发起支付。调用支付的关键代码如下:

PayReq *request = [[PayReq alloc] init];
request.partnerId = @"商户号";
request.prepayId= @"预支付交易会话ID";
request.package = @"Sign=WXPay";
request.nonceStr= @"随机字符串";
request.timeStamp= @"时间戳";
request.sign= @"签名";
[WXApi sendReq:request];

4.支付结果回调

参照微信SDK Sample,实现onResp方法、完成支付后,微信app会返回到商家app页面,并且回调onResp函数,开发者需要在该方法中接收通知,判断返回码,如果支付成功则去后台查询支付结果再展示给用户实际支付结果。注意:不能以客户端取到的钱数作为用户支付结果,应该以服务器端接收到的支付通知或查询API返回的结果为准。代码示例如下:

 -(void)onResp:(BaseResp*)resp
 {
        if ([respisKindOfClass:[PayRespclass]])
               {
		    PayResp*response=(PayResp*)resp;
			   switch(response.errCode)
			       {
			          case 0:
                      			//服务器端查询支付通知或查询API返回的结果再提示成功
                      			NSlog(@"支付成功");
                      	break;
                      	default:
                      	NSlog(@"支付失败,retcode=%d",resp.errCode);
                      	break;
                                  }
                }
 }

回调中errCode值列表

0      成功

-1     失败

-2     用户取消

2018-08-06 14:46:00 weixin_34185364 阅读数 14

当前主流 APP 内购支付方式为微信支付、支付宝支付,结合项目对两类支付做简单总结。

一、微信支付流程

微信支付(官方):
签名算法:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=4_3
APP 开发步骤:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
API 列表:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1#

1915113-6cf5e56c4e2aa1e6.png
微信支付流程图

1.引入支付 SDK,完成相关配置

APP 开发步骤:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
资源中心:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319164&lang=zh_CN

2.APP 内购支付流程

2.1 APP 商品下单

商品下单需先调用后端接口

  • 1.验证用户 token 接口
  • 2.请求后端接口,返回微信 prepayid

2.2 调起支付

  • 1.制作签名(也可以服务器端制作签名)
    微信需要二次签名
  • 2.调起支付接口
-(void)signWXPay:(NSString *)prepayid{
    payRequsestHandler *req = [[payRequsestHandler alloc] init];
    [req init:APP_ID mch_id:MCH_ID];
    //设置密钥
    [req setKey:PARTNER_ID];
    
    NSMutableDictionary *signParams = [NSMutableDictionary dictionary];
    [signParams setObject: APP_ID        forKey:@"appid"];
    
    NSString  *time_stamp, *nonce_str;
    time_t now;
    time(&now);
    time_stamp  = [NSString stringWithFormat:@"%ld", now];
    nonce_str = [WXUtil md5:time_stamp];
    
    [signParams setObject: nonce_str   forKey:@"noncestr"];
    [signParams setObject: @"Sign=WXPay"      forKey:@"package"];
    [signParams setObject: MCH_ID        forKey:@"partnerid"];
    [signParams setObject: time_stamp   forKey:@"timestamp"];
    [signParams setObject: prepayid     forKey:@"prepayid"];

    //生成签名
    NSString *sign  = [req createMd5Sign:signParams];
    
    //调起微信支付https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_12&index=2
    if (sign != nil) {
        PayReq* req1             = [[PayReq alloc] init];
        req1.openID              = APP_ID;
        req1.partnerId           = MCH_ID;
        req1.prepayId            = prepayid;
        req1.nonceStr            = nonce_str;
        req1.timeStamp           = time_stamp.intValue;
        req1.package             = @"Sign=WXPay";
        req1.sign                = sign;
        [WXApi sendReq:req1];
    }
}

2.3 处理回调

-(void)onResp:(BaseResp *)resp
{
#pragma mark 微信分享返回resp是SendMessageToWXResp类型
    if ([resp isKindOfClass:[SendAuthResp class]]) {
        SendAuthResp *aresp = (SendAuthResp *)resp;
        if (aresp.errCode == 0)
        {
        }else if (aresp.errCode == -4){
            //   [self messageShow:@"用户拒绝"];
        }else if (aresp.errCode == -2){
            //  [self messageShow:@"用户取消"];
        }
    }

    if([resp isKindOfClass:[PayResp class]]){
        //支付返回结果,实际支付结果需要去微信服务器端查询
        switch (resp.errCode) {
            case WXSuccess:
            {
            #支付成功-相关处理代码
            }
                break;
            default:
                if (resp.errCode == -4){
                    //[self messageShow:@"用户拒绝"];
                }else if (resp.errCode == -2){
                    // [self messageShow:@"用户取消"];
                }
                #支付失败-相关处理代码
                break;
        }
    }
}

二、支付宝支付

支付宝支付(官方):
APP 支付介绍:https://docs.open.alipay.com/204
iOS 集成流程:https://docs.open.alipay.com/204/105295/
参数说明:https://docs.open.alipay.com/204/105465/
签名专区:https://docs.open.alipay.com/291/
API 列表:https://docs.open.alipay.com/api/

1915113-e429ae3979cf8d7c.png
支付处理体系

1915113-6ae444725542b992.png
接入流程

1.引入支付 SDK,完成相关配置

APP 开发步骤:https://docs.open.alipay.com/204/105295/
资源中心:https://docs.open.alipay.com/54/104509/

2.APP 内购支付流程

2.1 APP 商品下单

商品下单需先调用后端接口

1.验证用户 token 接口
2.请求后端接口,返回支付宝签名(也可以 APP 做签名)
签名专区:https://docs.open.alipay.com/291/

签名返回示例:
请求参数说明:https://docs.open.alipay.com/204/105465/

charset=utf-8
&biz_content=%7B%2timeout_express%2%2230m%22%2Cproduct_code%22%3AQUICK_MSECURITY_PAY%2C%22total_amount%8A%A1%E8%B4%B5%E5%AE%BE%E5body%22%3A%22%E9%99%E8%85%BE%E4%B8%93%E4%BA%AB%22%2C%22out_trade_no%22%3A%22Z******%22%2C%22passback_params%22%3A%222
&method=alipay.****.app.pay
&notify_url=http%3A%2F%2Fletapi.*******.net%2FretrunPay%2Fali
&app_id=201****890181
&sign_type=RSA2
&version=1.0
&timestamp=****+11%3A52%3A18
&sign=ShkofgVliErCyPGXdmW%2BOcdjQPBSILSigZzLhy3jzj6dQZcQEqsOMvsSMmOQ0lWK3YzlrcnWMQmY71%2Fo3Es8icbNtkRaQAx8%2FjwANDzf50x0bD5AEFcGFDX4icaSKs%2BGk5VGhYbiZP6VeW8cYaWE8Gyg3A9fGbufN1yWA8uB5SrQaBo9EeieI%2Bj%2BqPY4CVtoP9acOvr2HPrR2DKmqLNO%2FSjmWPiVqxkg%3D%3D****;
2.2 调起支付

返回参数说明:https://docs.open.alipay.com/204/105301/

-(void)Alipay:(NSString *)orderString{
    [[AlipaySDK defaultService] payOrder:orderString fromScheme:@"alisdk****" callback:^(NSDictionary *resultDic) {
        NSLog(@"==注意这里是支付宝返回结果=====%@",resultDic);
        NSNumber *restNum = [resultDic objectForKey:@"resultStatus"];
        if ([restNum integerValue] == 9000) {
            [[NSNotificationCenter defaultCenter] postNotificationName:@"paySuccess" object:nil];
        } else{
            [[NSNotificationCenter defaultCenter] postNotificationName:@"payFailure" object:nil];
        }
    }];
}
1915113-d83261bdfe63a3fc.png
resultStatus 结果码
2.3支付回调
#pragma mark - 支付宝支付回调
-(void)aliPay:(NSURL *)url{
    [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
        NSNumber *restNum = [resultDic objectForKey:@"resultStatus"];
        if ([restNum integerValue] == 9000) {
            //支付成功处理代码
        }else{
            //支付失败处理代码
        }
    }];
}

其他

如果项目还引入了友盟分享的话还需要在代理方法里设置。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    NSLog(@"%@", url.host);
    if ([url.host isEqualToString:@"safepay"]){//支付宝支付
        [self aliPay:url];
    }else if ([url.host isEqualToString:@"pay"]) {//微信支付
        return [WXApi handleOpenURL:url delegate:self];
    }else{
        //6.3的新的API调用,是为了兼容国外平台(例如:新版facebookSDK,VK等)的调用[如果用6.2的api调用会没有回调],对国内平台没有影响
        BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation];
        if (!result) {
            // 其他如支付等SDK的回调
        }
        return result;
    }
    return YES;
}
2018-01-11 14:42:13 qq_30746437 阅读数 8282

场景介绍
H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。
主要用于触屏版的手机浏览器请求微信支付的场景。可以方便的从外部浏览器唤起微信支付。
提醒:H5支付不建议在APP端使用,如需要在APP中使用微信支付,请接APP支付。

这个场景介绍来自微信H5支付的开发文档,说建议不要在APP端使用H5支付,但是确实有这样的需求,我们来看看该怎么办?

因为是直接通过网页链接调用,所以我们的APP并没有在微信SDK去注册,也并没有传输给微信对应的scheme,然后iOS的进程调用就是通过schme实现的。所以可以肯定的是在iOS APP发起H5微信支付这个需求,是不能实现微信向APP的回调跳转,因为调用了H5支付后,微信并不知道是哪个APP发生了这个操作,本来H5支付就是默认的网页支付和APP没有任何关系,我们现在只是在APP中打开了这个网页而已。
回调实现不了,我们来看看能不能从APP通过网页向微信客户端跳转,还是温习一下iOS的进程跳转,通过给APP标识对应的scheme,然后调用openURL,传输scheme:xxxxx格式的URL完成对该APP的调用。这个scheme,有点类似http的一种协议,微信的APP的scheme为weixin。

我们正常通过WKWebView打开支付网页完成支付跳转,发现无法完成跳转。在看网页返回了weixin:payxxxxxx样式的链接,然后没有反应,说明WKWebView识别不了weixin:协议,需要我们手动处理一下,直接上代码,如图:
这里写图片描述
这样的话,就能正常完成跳转到微信客户端了。

经过实验发现,使用UIWebView可以通过weixin:xxxx格式的链接调用微信客户端。但是如果是先进入的是http:xxxx协议的网页,通过操作在返回给网页weixin:xxxx链接继续访问,则无论是在UIWebView和WEWebView下都不能完成对微信客户端的跳转。同样需要以上处理。

关于网页开发对WKWebView的适配,大家可以参靠一下:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1483682025_enmey

2018-04-16 13:41:00 weixin_34205826 阅读数 19

相对来讲不是很难,两个sdk集成都只需要四个步骤就搞定了!

一、集成支付宝支付

支付宝支付集成官方教程
支付宝官方Demo下载地址

1:导入SDK并添加依赖库

把iOS包中的压缩文件中以下文件拷贝到项目文件夹下,并导入到项目工程中:
330761-f3f8e3571d3781eb.png
屏幕快照 2018-04-16 下午1.38.13.png
AlipaySDK.framework
 AlipaySDK.bundle 

在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:


330761-4b09a9586f33fa0d.png
屏幕快照 2018-04-16 下午1.40.42.png
2:在APPDelegate里边添加代码

引入头文件

#import <AlipaySDK/AlipaySDK.h>

添加支付回调方法

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if ([url.host isEqualToString:@"safepay"]) {
        // 支付跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
        
        // 授权跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
            // 解析 auth code
            NSString *result = resultDic[@"result"];
            NSString *authCode = nil;
            if (result.length>0) {
                NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                for (NSString *subResult in resultArr) {
                    if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                        authCode = [subResult substringFromIndex:10];
                        break;
                    }
                }
            }
            NSLog(@"授权结果 authCode = %@", authCode?:@"");
        }];
    }
//此处是微信支付
    if ([url.scheme isEqualToString:@"wxf6e443649d826e8e"])
    {
        return  [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];
    }
    return YES;
}

// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    if ([url.host isEqualToString:@"safepay"]) {
        // 支付跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
        
        // 授权跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
            // 解析 auth code
            NSString *result = resultDic[@"result"];
            NSString *authCode = nil;
            if (result.length>0) {
                NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                for (NSString *subResult in resultArr) {
                    if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                        authCode = [subResult substringFromIndex:10];
                        break;
                    }
                }
            }
            NSLog(@"授权结果 authCode = %@", authCode?:@"");
        }];
    }
//此处是微信支付
    if ([url.scheme isEqualToString:@"wxf6e443649d826e8e"])
    {
        return  [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];
    }
    return YES;
}
3.添加URL Scheme配置

在Targets -> Info 下最后一个找到URL Scheme,
点击“Info”选项卡,在“URL Types”选项中,点击“+”。


330761-32af4fa4d4fcdbdb.png
EDA5C4F6-1BC0-4F71-9180-EA31B227F0FB.png
4.在支付地方添加调起支付宝方法

引入头文件

#import <AlipaySDK/AlipaySDK.h>

支付地方添加调起支付宝代码

      [[AlipaySDK defaultService] payOrder:@"此处是从后台拿到的订单签名信息"  fromScheme:@"这里边填写第三步配置的URL Scheme" callback:^(NSDictionary *resultDic) {
            NSLog(@"=====%@",resultDic);
            if ([resultDic[@"resultStatus"]intValue] == 9000) {
                NSLog(@"成功");
            } else {
                NSLog(@"失败");
            }
        }];

二、集成微信支付

微信支付集成官方教程
微信官方Demo下载地址

1:导入SDK并添加依赖库
330761-9c32be85ad6eb776.png
屏幕快照 2018-04-16 下午1.59.49.png

记得添加这两个配置 (画重点)注意看官方Demo里边的README,拿起小本子记下来


330761-97dc06c1bae1ae4e.png
屏幕快照 2018-04-16 下午2.01.53.png
2:在APPDelegate里边添加代码

引入头文件

#import <WXApi.h>
并添加回调代理
@interface AppDelegate ()<WXApiDelegate>

注册微信

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    [WXApi registerApp:@"填写申请的appid"];
    return YES;
}

添加支付回调方法,上边支付宝集成代码里边一样的代码

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if ([url.host isEqualToString:@"safepay"]) {
        // 支付跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
        
        // 授权跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
            // 解析 auth code
            NSString *result = resultDic[@"result"];
            NSString *authCode = nil;
            if (result.length>0) {
                NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                for (NSString *subResult in resultArr) {
                    if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                        authCode = [subResult substringFromIndex:10];
                        break;
                    }
                }
            }
            NSLog(@"授权结果 authCode = %@", authCode?:@"");
        }];
    }
//此处是微信支付
    if ([url.scheme isEqualToString:@"wxf6e443649d826e8e"])
    {
        return  [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];
    }
    return YES;
}

// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    if ([url.host isEqualToString:@"safepay"]) {
        // 支付跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
        
        // 授权跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
            // 解析 auth code
            NSString *result = resultDic[@"result"];
            NSString *authCode = nil;
            if (result.length>0) {
                NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                for (NSString *subResult in resultArr) {
                    if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                        authCode = [subResult substringFromIndex:10];
                        break;
                    }
                }
            }
            NSLog(@"授权结果 authCode = %@", authCode?:@"");
        }];
    }
//此处是微信支付
    if ([url.scheme isEqualToString:@"wxf6e443649d826e8e"])
    {
        return  [WXApi handleOpenURL:url delegate:(id<WXApiDelegate>)self];
    }
    return YES;
}

添加微信支付回调代理方法

//微信回调,有支付结果的时候会回调这个方法
- (void)onResp:(BaseResp *)resp
{
    //    支付结果回调
    if([resp isKindOfClass:[PayResp class]]){
        switch (resp.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;
            }
        }
    }
}
3.添加URL Scheme配置

在Targets -> Info 下最后一个找到URL Scheme,
点击“Info”选项卡,在“URL Types”选项中,点击“+” 填写申请的那个APPId

330761-32af4fa4d4fcdbdb.png
EDA5C4F6-1BC0-4F71-9180-EA31B227F0FB.png

4.在支付地方添加调起微信方法

引入头文件

#import <WXApi.h>

支付地方添加调起微信代码

 if ([WXApi isWXAppInstalled]) {
        NSLog(@"已经安装了微信...");
     
 //这里调用后台接口获取订单的详细信息,然后调用微信支付方法
    }else{

    }

 #pragma mark 微信支付方法

- (void)WXPayWithAppid:(NSString *)appid partnerid:(NSString *)partnerid prepayid:(NSString *)prepayid package:(NSString *)package noncestr:(NSString *)noncestr timestamp:(NSString *)timestamp sign:(NSString *)sign{
    
    //需要创建这个支付对象
    PayReq *req   = [[PayReq alloc] init];
    //由用户微信号和AppID组成的唯一标识,用于校验微信用户
    req.openID = appid;
    // 商家id,在注册的时候给的
    req.partnerId = partnerid;
    // 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你
    req.prepayId  = prepayid;
    // 根据财付通文档填写的数据和签名
    req.package  = package;
    // 随机编码,为了防止重复的,在后台生成
    req.nonceStr  = noncestr;
    // 这个是时间戳,也是在后台生成的,为了验证支付的
    NSString * stamp = timestamp;
    req.timeStamp = stamp.intValue;
    // 这个签名也是后台做的
    req.sign = sign;
    if ([WXApi sendReq:req]) { //发送请求到微信,等待微信返回onResp
        NSLog(@"吊起微信成功...");
    }else{
        NSLog(@"吊起微信失败...");
    }
}

自此,大功告成

ps:期间微信遇到问题是微信的支付sdk和最早之前集成的sharesdk里边的微信登录分享有冲突,找了半天,解决办法是把最新的支付的sdk替换掉sharesdk里边的关于微信的sdk,然后解决了。
这里是ShareSdk官方给出的解决方案

没有更多推荐了,返回首页