前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小程序,公众号,App的微信支付详解

小程序,公众号,App的微信支付详解

作者头像
honey缘木鱼
发布2018-06-08 10:50:39
4K0
发布2018-06-08 10:50:39
举报
文章被收录于专栏:娱乐心理测试娱乐心理测试

现在我们好多开发应用几乎80%都用到了支付接口,小程序,公众号,App在微信支付上有什么相似于不同呢?

一.APP支付(https://open.weixin.qq.com

1.项目设置APPID

配置

2.业务流程

流程

3.下载并运行demo

其实把demo看明白了,直接运用到自己的app里,也不是不可以的

4.设置项目

  1. 在Xcode中,projectName-->Info-->URL Types 添加appid。设置之后才能实现应用间跳转

添加

2.导入sdk

2411791-a4695842aaa3155a.png

如果使用了pod,直接在Podfile中添加pod 'WechatOpenSDK' 然后执行 pod update即可。如果没有使用pod,在添加了sdk文件包之后,需要在pojectName-->General-->Linked Frameworks and Libraries 中添加相应内容

添加框架

3.代码

在AppDelegate.m 中的didFinishLaunchingWithOptions方法添加

代码语言:javascript
复制
[WXApi registerApp:@"wx00000000"];//注册appid
代码语言:javascript
复制
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return  [WXApi handleOpenURL:url delegate:[PaymentManager sharedManager]];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [WXApi handleOpenURL:url delegate:[PaymentManager sharedManager]];
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    return [WXApi handleOpenURL:url delegate:[PaymentManager sharedManager]];
}

作为前端开发,那些麻烦的签名都属于服务器端的,顿时有没有感觉很简单,下面及 就看一下具体。下面的步奏就是 小程序,公众号,App微信支付通用的前端方法。

1.先向服务器端请求接口,拿到订单号

2.根据订单号,再向服务器端请求一次,拿到微信所需要的串,就是各种签名算法

3.调用的微信支付方法分别为:

App代码:

代码语言:javascript
复制
   NSString *res = [WXApiRequestHandler jumpToBizPay:DESDecrypt];
 DESDecrypt就是后台返回的签名字符串。


+ (NSString * )jumpToBizPay:(NSString *)string
{
    if(string!=nil)
    {
        if([self booWeixin])
        {
            NSDictionary *dict = [IHUtility getWXString:string];
            PayReq* req             = [[PayReq alloc] init];
            req.partnerId           =   [dict valueForKey:@"partnerid"];
            req.prepayId            =[dict valueForKey:@"prepayid"];
            req.nonceStr            = [dict valueForKey:@"noncestr"];
            req.timeStamp           =  [[dict valueForKey:@"timestamp"] intValue];
            req.package             =  [dict valueForKey:@"package"];
            req.sign                = [dict valueForKey:@"sign"];
            [WXApi sendReq:req];
            return @"";
        }else
        {
            return @"请安装微信客户端";
        }
    }
   return @"支付失败";
}

+(BOOL)booWeixin{
    // 判断是否安装微信
    if ([WXApi isWXAppInstalled] ){
        return YES;
        //判断当前微信的版本是否支持OpenApi
//        if ([WXApi isWXAppSupportApi]) {
//            return YES;
//        }else{
//            NSLog(@"请升级微信至最新版本!");
//            return NO;
//        }
    }else{
        NSLog(@"请安装微信客户端");
        return NO;
    }
}

公众号代码:

代码语言:javascript
复制
注:JS API的返回结果get_brand_wcpay_request:ok仅在用户成功完成支付时返回。由于前端交互复杂,get_brand_wcpay_request:cancel或者get_brand_wcpay_request:fail可以统一处理为用户遇到错误或者主动放弃,不必细化区分。
示例代码如下:

function onBridgeReady(){
   WeixinJSBridge.invoke(
       'getBrandWCPayRequest', {
           "appId":"wx2421b1c4370ec43b",     //公众号名称,由商户传入     
           "timeStamp":"1395712654",         //时间戳,自1970年以来的秒数     
           "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串     
           "package":"prepay_id=u802345jgfjsdfgsdg888",     
           "signType":"MD5",         //微信签名方式:     
           "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 
       },
       function(res){     
           if(res.err_msg == "get_brand_wcpay_request:ok" ) {}     // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。 
       }
   ); 
}
if (typeof WeixinJSBridge == "undefined"){
   if( document.addEventListener ){
       document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
   }else if (document.attachEvent){
       document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 
       document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
   }
}else{
   onBridgeReady();
}

小程序代码:

代码语言:javascript
复制
wx.requestPayment(
{
'timeStamp': '',
'nonceStr': '',
'package': '',
'signType': 'MD5',
'paySign': '',
'success':function(res){},
'fail':function(res){},
'complete':function(res){}
})

注意:appId都是不一样的,在App的在开发平台(https://open.weixin.qq.com),小程序,公众号的在公众平台(https://mp.weixin.qq.com

App的官方demo很类似,,小程序的在我(https://cloud.tencent.com/developer/article/1147451

如有问题,请多多指教!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.06.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档