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

现在我们好多开发应用几乎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方法添加

[WXApi registerApp:@"wx00000000"];//注册appid
- (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代码:

   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;
    }
}

公众号代码:

注: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();
}

小程序代码:

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://www.jianshu.com/p/b7e841c551e0

如有问题,请多多指教!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏移动端周边技术扩展

Cocoapods生成静态库(完整)

3505
来自专栏陈满iOS

iOS·采用第三方(百度地图SDK)实现定位等功能开发

首先,申请一个baidu账号,接着进入新建密钥入口申请成为baidu地图开发者,填写相关开发者信息和短信验证码。接下来点击创建应用,如官方文档新建密钥文档指南里...

5623
来自专栏ionic3+

ng-zorro-mobile,踩坑记

ionic3和ionic4差别是比较大的,所以ionic3二次封装的组件基本是不能直接用在ionic4上。ng-zorro-mobile并不是依赖ionic的组...

1.1K3
来自专栏iOS开发攻城狮的集散地

iOS CoreData (二) 版本升级和数据库迁移

2045
来自专栏『不羁阁』 | 行走少年郎专栏

iOS网络--『文件下载、断点下载』的实现(一):NSURLConnection

2985
来自专栏护卫神小符的专栏

如何在护卫神镜像中安装 SQL SERVER?

针对很多腾讯云新上云的用户,在购买安装护卫神镜像系统后,需要使用到SQL SERVER但是又不清楚如何安装配置SQL SERVER。

3200
来自专栏陈满iOS

报错笔记:Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

https://stackoverflow.com/questions/24337791/exc-bad-instruction-code-exc-i386-i...

2.1K2
来自专栏LinXunFeng的专栏

iOS - FTPManager的简单使用及常见问题

1744
来自专栏逸鹏说道

直传文件到Azure Storage的Blob服务中

题记:为了庆祝获得微信公众号赞赏功能,忙里抽闲分享一下最近工作的一点心得:如何直接从浏览器中上传文件到Azure Storage的Blob服务中。 为什么 如果...

3617
来自专栏草根专栏

使用Identity Server 4建立Authorization Server (1)

本文内容基本完全来自于Identity Server 4官方文档: https://identityserver4.readthedocs.io/ 官方文档很详...

52310

扫码关注云+社区

领取腾讯云代金券