微信公众号调起微信内置浏览器h5支付

微信内置h5浏览器 JSAPI 支付 getBrandWCPayRequest是一种基于微信公众号和微信支付平台的支付方式。它为商户提供了一种便捷的方式来处理用户的付款请求。通过getBrandWCPayRequest支付,用户可以在微信客户端快速完成支付过程,无需再次输入支付信息。WeixinJSBridge是微信内置浏览器提供的JavaScript桥接工具,开发者可以使用它在web页面中调用微信客户端的接口和功能。通过使用WeixinJSBridge,开发者可以实现更多定制化的功能,提升用户体验。 阅读详情

(一)微信公众号和微信商户平台配置

根据微信公众平台的使用教程配置

 

 

一、设置支付目录

请确保实际支付时的请求目录与后台配置的目录一致,否则将无法成功唤起微信支付。

在微信商户平台(pay.weixin.qq.com)设置您的公众号支付支付目录,设置路径:商户平台-->产品中心-->开发配置,如图7.7所示。公众号支付在请求支付的时候会校验请求来源是否有在商户平台做了配置,所以必须确保支付目录已经正确的被配置,否则将验证失败,请求支付不成功。

支付目录配置

图7.7 微信公众号支付-支付目录配置

二、设置授权域名

开发公众号支付时,在统一下单接口中要求必传用户openid,而获取openid则需要您在公众平台设置获取openid的域名,只有被设置过的域名才是一个有效的获取openid的域名,否则将获取失败。具体界面如图7.8所示:

微信网页授权域名微信网页授权域名

图7.8 微信网页授权域名设置

 

三、配置商户秘钥key

 

参考文章https://jingyan.baidu.com/article/75ab0bcbbf7034d6864db2c3.html

注意配置秘钥后要自己保存秘钥,商户平台上不能查看秘钥。后面的签名算法需要用到商户秘钥。

(二)统一下单

一、配置和参数

参考文档,需要注意的是:

1.微信支付结果通知的回调地址notify_url必须是80端口,如果不是80端口的话可以通过nginx反向代理

2.交易类型这里是公众号支付,填JSAPI

3.openid,公众号支付即trade_type=JSAPI时,此参数必传,此参数是前端微信登录后获取的openid

二、代码实现

1.nodejs做后台实现统一下单接口

 

h5_order: function(attach, body, mch_id, openid, out_trade_no, total_fee, notify_url,spbill_create_ip,scene_info) {
    var deferred = Q.defer();
    var appid = "wx4280cd3b0ecf2a38";//"wx7df91d705b3f0a15";   // h5的appid
    var nonce_str = this.createNonceStr();
    var trade_type = "JSAPI";
    var url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
    var spbill_create_ip = "115.192.87.205";//写死了这边
    var formData = "<xml>";
    formData += "<appid>" + appid + "</appid>"; //appid  必填
    //formData += "<attach>" + attach + "</attach>"; //附加数据
    formData += "<body>" + body + "</body>";   //必填
    formData += "<mch_id>" + mch_id + "</mch_id>"; //商户号  //必填
    formData += "<nonce_str>" + nonce_str + "</nonce_str>"; //随机字符串,不长于32位。 //必填
    formData += "<notify_url>" + notify_url + "</notify_url>";  //必填
    formData += "<openid>" + openid + "</openid>";
    formData += "<out_trade_no>" + out_trade_no + "</out_trade_no>";  //必填
    formData += "<spbill_create_ip>" + spbill_create_ip + "</spbill_create_ip>";  //IP地址需要动态获取 //必填
    formData += "<total_fee>" + total_fee + "</total_fee>";  //必填
    formData += "<trade_type>" + trade_type + "</trade_type>";  //必填
    //formData += "<sign>" + this.getSign(appid, mch_id, "", body, nonce_str) + "</sign>";  //  getSign: function(appid, mch_id, device_info, body, nonce_str) {
    //formData += "<scene_info>" + JSON.stringify(scene_info) + "</scene_info>";
    formData += "<sign>" + this.signOne(appid, attach, body, mch_id, nonce_str, notify_url, openid, out_trade_no, spbill_create_ip, total_fee, "JSAPI") + "</sign>";
    formData += "</xml>";

    //console.log("formData:"+formData);
    var self = this;
    request({
        url: url,
        method: 'POST',
        body: formData
    }, function(err, response, body) {
        if (!err && response.statusCode == 200) {
            console.log(body);
            var parser = new xml2js.Parser({ trim:true, explicitArray:false, explicitRoot:false });//解析签名结果xml转json
            parser.parseString(body, function(err, result){
                var prepay_id = result['prepay_id'];
                var timeStamp = self.createTimeStamp();
                var package="prepay_id="+prepay_id;
                var _paySignjs = self.signTwoH5(appid, nonce_str, package,timeStamp,"MD5");
                var args = {
                    appId: appid,
                    package: package,
                    timeStamp: timeStamp,
                    nonceStr: nonce_str,
                    paySign: _paySignjs
                };
                //console.log("进行二次签名后数据", args);
                deferred.resolve(args);
            });
        } else {
            console.log(body);
        }
    });
    return deferred.promise;
},

2.签名函数signOne:

 

signOne: function(appid, attach, body, mch_id, nonce_str, notify_url, openid, out_trade_no, spbill_create_ip, total_fee, trade_type) {
    //参数名ASCII码从小到大排序(字典序)
    var ret = {
        appid: appid,//ok
        //attach: attach,
        body: body,//ok
        mch_id: mch_id,//ok
        nonce_str: nonce_str,//ok
        notify_url: notify_url,
        openid: openid,
        out_trade_no: out_trade_no,
        spbill_create_ip: spbill_create_ip,
        total_fee: total_fee,
        trade_type: trade_type    //类型
    };
    var string = this.raw(ret);
    string = string + '&key=' + key; //key为在微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置
    console.log("signOne string:"+string);
    var crypto = require('crypto');
    var sign = crypto.createHash('md5').update(string, 'utf8').digest('hex');//md5加密操作
    return sign.toUpperCase();//转换成大写字母
},

 
//拼接
raw: function(args) {
    var keys = Object.keys(args);
    keys = keys.sort()
    var newArgs = {};
    keys.forEach(function(key) {
        newArgs[key] = args[key];
    });
    var string = '';
    for (var k in newArgs) {
        string += '&' + k + '=' + newArgs[k];
    }
    string = string.substr(1);
    return string;
}

2.签名函数signTwoH5:

 

signTwoH5: function(appid, nonceStr, package,timestamp,signType) {
    var ret = {
        appId: appid,
        nonceStr: nonceStr,
        package: package,
        timeStamp: timestamp,
        signType:signType,
    };

    var string = this.raw(ret);
    string = string + '&key=' + key;
    console.log("signTwo string:  " + string);

    var sign = crypto.createHash('md5').update(string, 'utf8').digest('hex');
    return sign.toUpperCase();
}

3.生成时间戳和随机字符串函数

 

// 随机字符串产生函数
createNonceStr: function() {
    return Math.random().toString(36).substr(2, 15);
},

// 时间戳产生函数
createTimeStamp: function() {
    return parseInt(new Date().getTime() / 1000) + '';
},

4.服务端生成预支付订单号等信息后发送给前端,前端微信内置浏览器调起支付的代码如下:

 

                    function onBridgeReady(){
 
alert(JSON.stringify(args));
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId":args.appId, //公众号名称,由商户传入
"timeStamp":String(args.timeStamp), //时间戳,自1970年以来的秒数
"nonceStr":args.nonceStr, //随机串
"package":args.package,
"signType":"MD5", //微信签名方式:
"paySign":args.paySign //微信签名
},
function(res){
 
if(res.err_msg == "get_brand_wcpay_request:ok" ) {// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。
if(callback){
callback(0);
}
} else if(res.err_msg == "get_brand_wcpay_request:cancel"){
if(callback){
callback(1);
}
}else{
alert(JSON.stringify(res));
if(callback){
callback(-1);
}
}
 
 
}
);
}
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();
}

有什么错误信息,可以用alert(JSON.stringify(res))打印出来

微信支付—微信H5支付「微信内部浏览器」 补充:授权链接中的 scope 参数分为 snsapi_base、snsapi_userinfo,snsapi_base 可以获得用户的唯一标识 openid,snsapi_userinfo 则在此基础上获得用户资料「昵称、头像等」上述方法中是用来判断是否是微信环境的, 阅读详情

相关推荐

uniApp H5微信网页授权,微信支付

用于记录 uniapp 编译成H5后,完成微信授权和微信支付,微信浏览器中主要看场景二 业务场景介绍 业务需要在H5中完成支付功能(微信支付) 使用场景介绍 1、H5运行在普通浏览器中; 2、H5运行在微信浏览器中。 分析过程 场景一:H5运行在普通浏览器中 H5普通浏览器支付过程并不复杂,大致流程如下: a、前端发起支付请求给后端,后端收到后,调用微信支付接口下单; b、微信支付接口会返回一个支付链接给到后端; c、后端把微信返回的支付链接通过支付请求(a)接口返回给前端; d、前端拿到链接之后,跳转.

qq_42514643的博客 8531

微信网页支付小白指南-域内浏览器支付 + 外部浏览器支付

关于微信网页支付,分为微信域内浏览器支付 + 外部浏览器支付,两者还是稍微有点点区别的,内部浏览器即在微信内打开网页,进行支付,支付调用是需要开通JSAPI支付方式;而外部浏览器「比如浏览器等」则需要开通 H5支付方式。

weixin_43805705的博客 5755

微信H5页面实现微信小程序支付

微信H5页面打开微信小程序支付功能

小木木的开发日常 2万+

微信小程序、微信公众号、H5页面之间的跳转

1、微信小程序跳转到H5页面,使用。2、H5页面跳转到微信小程序。

辽辽无期的博客 3799

uniapp微信支付、支付宝支付、银联支付经验总结

uniapp项目开发支付功能

m0_56307415的博客 8380

微信H5支付的坑

因为业务需要,搞了一下微信的H5支付,H5支付一般的使用场景是在微信内置浏览器和qq浏览器之外生态要使用的支付方式,一般在的使用场景是在多个不同终端想使用一个支付接口得解决方案,代码为php代码,与微信其他支付相似,但是有些坑需要填一下。 $headers = array(); $headers[] = 'Accept: text/html,applicatio...

年少的博客 1895

微信公众号支付方法(标题重复-.-...)

随便记一下。 success(res) { if (res.data.code == 200) { // 唤起微信支付 WeixinJSBridge.invoke( 'getBra3ndWCPayRequest', { "appId": res.data.data.appId, //公众号名称,由商户传入 "timeStamp": res.data.data...

qq_43455397的博客 351

微信公众号 - 最新详细实现H5网页接入微信支付功能,开发移动端、PC端网站集成使用微信支付流程及示例代码,公众号网页利用JS-SDK/JSAPI/H5支付授权唤起微信支付,可脱离微信环境支付或内置浏

微信公众号,微信支付,网页,移动端,h5,扫码支付,二维码付款,手机网页,电脑pc网页生成支付二维码,js-sdk,jsapi,外部浏览器调起微信支付,脱离微信环境,在微信内置浏览器如何进行微信支付,前端H5微信支付,web网站,vue2,vue3,nuxt2,nuxt3,jquery,微信公众号h5支付流程,如何实现,怎么做,回调报错,redirect_uri参数错误,必须部署才能调试吗,怎么不打包发布就能在本机测试,微信H5支付能力,uniapp微信支付,h5页面调起支付,支付没反应,无效,失败,H5页

🏆 前端领域优质创作者 6103

全网最详细的uniapp微信支付教程,包含APP微信支付、微信内置浏览器支付、微信外h5支付

一、APP微信支付 1、微信支付之前就要生成自己的订单了,也就是存在自己服务器的订单。 //每个人的请求方式封装不一样,可忽略this.$u.api... this.$u.api.submitOrder({ good_name: _that.bjInfo.name, good_id: _that.bjInfo.id, user_id: _that.userId, address_id: _that.addressInfo.id, total: _that.bjInfo

程序员张礼奎的博客 1万+

【首份】2023年30米分辨率土地利用遥感监测数据

为了恢复和重建我国土地利用变化的现代过程,更好地预测、预报土地利用变化趋势,地球资源数据云以美国陆地卫星Landsat 遥感影像数据作为主信息源,结合Sentinel系列数据,通过人工目视解译和机器学习方法,建立了国家尺度1:10 万比例尺多时期土地利用/土地覆盖遥感监测数据库(CNLUCC)因早期Landsat数据时空覆盖缺失,1972-1977年合成第一期数据,1978-1985年合成第二期数据,1986年起每年度生成一期数据。投影:Albers正轴等面积双标准纬线圆锥投影南标准纬线:25°N。

地球资源数据云的官方博客 3681

医疗器械软件测试输出内容(1)

*单元测试(Unit Testing):**单元测试是软件测试的最底层,用于验证软件中最小的可测试单元——函数、方法或模块。系统测试是在集成测试之后进行的,它对整个系统进行测试,验证系统在不同部分集成在一起后是否满足需求和规格。: 集成测试是在单元测试之后进行的,它关注不同单元之间的交互和集成。对于不同安全级别的软件(IEC 62304 A类、B类、C类),在体系上要求输出的文件内容有所区别。**说明:**将集成测试和软件系统测试合并为一项单一的计划和一组活动是可接收的。

ct745363083的博客 1867

微信内置浏览器调用微信 JS-SDK 调用微信支付和微信外部浏览器h5支付

微信内置浏览器调用微信 JS-SDK 调用微信支付和微信外部浏览器h5支付

chengcheng9876的博客 2783

从XSA到Linux应用:Petalinux与Vitis的嵌入式开发全流程解析

本文详细解析了从XSA文件到Linux应用的嵌入式开发全流程,重点介绍了Petalinux与Vitis工具链的使用技巧和实战经验。通过XSA硬件描述、Petalinux工程搭建、系统镜像优化及Vitis开发配置等关键步骤,帮助开发者高效完成ZYNQ平台开发,解决常见问题并提升开发效率。

weixin_29195217的博客 192

使用webview内嵌的H5项目怎么调起H5支付,包含在app环境下中调起微信支付

在APP(Android&iOS)中嵌套H5进行拉取H5支付,也可在小程序内跳转H5页面进行微信支付

qq_44295667的博客 5012

基于Spring Boot在线远程考试系统的设计与实现

结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。目前的信息时代,对信息的管理趋于高效化,便捷化,这也是计算机大力普及所带来的便利,此程序软件在设备选用上,依靠的是比较大众的电脑设备,对电脑的配置没有过多要求,一般学校的计算机机房的电脑都可以满足程序开发需求,另外,开发出此款程序,让信息处理变得高效率,其所带来的高效益是远超程序开发的低成本的,因此程序开发的资金投入是可以忽略不计的。

ITbiyesheji的博客 1216

Python 爬虫实战:爬虫代码打包为可执行文件

本文详细介绍了使用PyInstaller工具将Python爬虫打包为可执行文件的全过程。以豆瓣电影Top250爬虫为例,首先对比了主流打包工具,推荐选择跨平台的PyInstaller。通过编写完整的爬虫代码(包含异常处理和数据保存功能),演示了从环境准备、代码测试到打包配置的具体步骤。重点讲解了单文件打包、自定义图标等高级功能,并针对常见的"找不到模块"、文件体积过大等问题提供了解决方案。文章还说明了跨平台打包的注意事项,帮助开发者实现爬虫程序的无环境依赖部署,大幅提升程序的易用性和部署

2503_91057718的博客 2216

微信支付—微信H5支付「非微信内部浏览器-QQ/UC浏览器等」

前言 微信支付-微信H5外部浏览器支付「本文」微信H5内部浏览器支付「待写」PC端扫码支付「待写」 一直计划着写一写微信支付相关的文章,希望能加深一下自己的印象,拖了一天又一天… 最近终于空出时间来填坑了,我将文章分为微信H5外部浏览器支付、微信H5内部浏览器支付、PC端扫码支付三篇来写。 本篇是微信H5外部浏览器支付:支付时会唤起微信APP进行支付。 扫盲补充:关于微信H5支付,分为...

niceyoo的博客 3万+

华为OD机试 新系统真题 【最小代价完成论文评审】

华为OD机试 新系统真题【最小代价完成论文评审】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【最小代价完成论文评审】多语言题解。

qq_45776114的博客 443

微信公众号接入H5支付

一、概述 1.H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。主要用于触屏版的手机浏览器请求微信支付的场景。可以方便的从外部浏览器唤起微信支付。如在微信内打开,无法进行支付。H5支付和公众号支付无法同时开通。 2.H5外起支付的优点: 1).签名无关性(整个支付,不需要你在微信后台填写app签名,需要设置key) 2...

goodmentc的专栏 3721

RT-DETR目标检测模型性能评价指标详解,涉及混淆矩阵、F1-Score、IoU、mAP、参数量、计算量等,一文打尽所有评价指标

本文主要讲解的是计算机视觉网络模型的性能评价指标,这是每一篇论文中都需要展示的内容。熟悉每一个评价指标也能够帮助我们在训练和改进模型过程中,更好的观察模型的变化效果。

Limiiiing的博客 3358

1. SAP Fiori Elements 开发环境的搭建和开发准备工作

本文介绍了本地使用 Visual Studio Code 进行 Fiori Elements 开发所需要安装的这个扩展包里6个能够提高 Fiori Elements 应用开发效率的扩展。在本教程后续步骤里我们会通过实际的例子介绍这些 Visual Studio Code 扩展的详细用法。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3451

微信内置浏览器打开的H5页面支付(前端开发角度)

场景: 用户通过消息或扫描二维码在微信内打开网页。 开发步骤: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3 没有什么比看官方文档更直接的了。 但是步骤中有提到获取openId的步骤,对于没有开发过微信公众号的朋友来说就有点一头雾水了:怎么获取? 获取openId的步骤: https:/...

aydongzhiping的博客 6265

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

vue 微信公众号的H5支付

直接上支付的代码 methods: { goPay() { Indicator.open(); console.log(2322222222222222222); console.log(this.orderId); console.log(this.getCookie("WeiId")); console.log(this.id); if (

xingchen678的博客 701

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

微信公众号支付-JSAPI支付

JSAPI支付是用户在微信中打开商户的H5页面,商户在H5页面通过调用微信支付提供的JSAPI接口调起微信支付模块完成支付。应用场景有: ◆ 用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付 ◆ 用户的好友在朋友圈、聊天窗口等分享商家页面连接,用户点击链接打开商家页面,完成支付 ◆ 将商户页面转换成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付 以下是公众号支付的开发流程:实际写的不多,不难的 注意点: 提交方式:采用POST方法提交 API密钥(前面中用到的key):交易过程生成签名

weixin_45335305的博客 2355

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【支付】h5端在 微信内置浏览器中 微信支付 uniapp h5端绑定微信(微信内置浏览器)

目前是在 登录成功后,自动绑定微信,首次 登录会有弹窗确定出现,往后是静默绑定,只能在线上测试。

AAAXiaoApple的博客 1510

微信公众号支付、h5支付、支付宝h5支付

记一次微信公众号支付、h5支付、支付宝h5支付 wap端支付可以参考,vue,反向不对,努力白费,看清楚再看文章 第一次进行微信方面的开发,遇到很多问题都一头雾水,没有方向,记录一下自己开发过程中遇到的一些问题 一个小小的页面同时具备了微信公众号充值、h5充值、以及支付宝充值。当然在微信内无法使用支付宝的,所以提示用户在浏览器打开进行充值,开发时也是踩坑无数。 问题1 在公众号登录后,选择在浏...

weixin_44868881的博客 2265
上一篇: cocos creator 游戏接入微信登录
下一篇: flv格式详解+实例剖析
惊群
博客等级 码龄16年 12粉丝 5原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值