Vue开发Html5微信公众号的步骤


Posted in Javascript onApril 11, 2019

一、调起微信支付

在微信浏览器里面打开H5网页中执行JS调起支付,WeixinJSBridge内置对象在其他浏览器中无效。
具体参考官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6

(1)大致流程:

Vue开发Html5微信公众号的步骤

(2)调用代码示例:

mounted(){
      if (typeof WeixinJSBridge == "undefined") {
        if (document.addEventListener) {
          document.addEventListener(
            "WeixinJSBridgeReady",
            this.onBridgeReady,
            false
          );
        } else if (document.attachEvent) {
          document.attachEvent(
            "WeixinJSBridgeReady",
            this.onBridgeReady
          );
          document.attachEvent(
            "onWeixinJSBridgeReady",
            this.onBridgeReady
          );
        }
      } else {
        this.onBridgeReady();
      }
}
methods:{
  // 调起微信支付
    onBridgeReady() {
      const pay_params = this.payInfo; //创建支付返回的签名信息
      WeixinJSBridge.invoke(
        "getBrandWCPayRequest",
        {
          appId: pay_params.appId, //公众号名称,由商户传入
          timeStamp: pay_params.timeStamp, //时间戳,自1970年以来的秒数
          nonceStr: pay_params.nonceStr, //随机串
          package: pay_params.package,
          signType: pay_params.signType, //微信签名方式:
          paySign: pay_params.paySign //微信签名
        },
        res => {
          if (res.err_msg == "get_brand_wcpay_request:ok") {
            // 校验支付
            alert('支付成功');
            
            //do something...
            
          }else if(res.err_msg == "get_brand_wcpay_request:cancel"||res.err_msg == "get_brand_wcpay_request:fail"){
            alert('支付失败');
          }
        }
      );
    },
}

二、实现Web签名+截图网页+上传截图

web签名使用 jsignature 实现,由于jsignature 基于Jquery实现,需要引入Jquery。
签名完成后,使用 html2canvas 实现网页全屏截图。
截图成功后,由于Canvas的 toDataURL方法会根据签名的复杂程度返回不同长短的Base64,过长的Base64传到后台会增加服务器负担,所以需要转成平时input type=file上传的图片格式

代码示例:

import jSignature from "jSignature"; 
  import html2canvas from 'html2canvas';
  
  mounted() {
    //通过setTimeout把代码丢到初始化最后执行
    this.Timer = setTimeout(() => {
      // Signature 签名Dom容器
      this.$SignDom = $("#Signature").jSignature({
        height: "100%",//占容器100%
        width: "100%"
      });
    }, 0);
  },
  methods:{
    //清空签名
    resetSign() {
      this.$SignDom && this.$SignDom.jSignature("reset");
    },
      // 获取签名
    async getSign() {
      if (!this.$SignDom) return;
      
      if (!this.$SignDom.jSignature("getData", "native").length) {
        alert("请填写您的签名!");
        return;
      }
      // jSignature - 获取签名Base64(注意:该Base64指签名那一块,不是整个页面)
      
      // let datapair = this.$SignDom.jSignature("getData", "image");
      // let SignSrc = "data:" + datapair[0] + "," + datapair[1];
      
      // html2canvas截取整个页面
      const HTML_CANVAS = await html2canvas(document.getElementById('app'));
      let SignSrc = HTML_CANVAS.toDataURL();
      
       // Base64 转 Blob 实现提交图片
      let uploadImg = this.dataURLtoFile(SignSrc);
      
      let param = new FormData(); //创建form对象
      param.append("file", uploadImg,'signImage.png'); 
      
      // send request...
    },
     // Base64转Blob上传图片
    dataURLtoFile(dataurl) {
      var arr = dataurl.split(","),
        mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]),
        n = bstr.length,
        u8arr = new Uint8Array(n);
      while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
      }
      return new Blob([u8arr],{
        type: mime,
      });
    }

  },
  destroyed() {
    //清理setTimeout
    this.Timer && clearTimeout(this.Timer);
  }

三、如何在npm run dev下,手机打开H5公众号测试

(1) 修改package.json,在dev 后面加上--host your IP

示例:

"scripts": {
  "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js --host 192.167.1.99",
 },

(2) dev跑起来之后,通过文件传输助手发给手机,在手机打开http://your IP:8080/即可

(3) 打开后就可以在手机上测试支付或wx-js-sdk等功能啦!

Javascript 相关文章推荐
js 替换功能函数,用正则表达式解决,js的全部替换
Dec 08 Javascript
javascript字符串拼接的效率问题
Dec 25 Javascript
js对象关系图 方便dom操作
Mar 18 Javascript
JavaScript中变量提升 Hoisting
Jul 03 Javascript
使用jquery自定义鼠标样式满足个性需求
Nov 05 Javascript
js实现按钮颜色渐变动画效果
Aug 20 Javascript
深入探究AngularJS框架中Scope对象的超级教程
Jan 04 Javascript
浅析使用BootStrap TreeView插件实现灵活配置快递模板
Nov 28 Javascript
Vue js 的生命周期(看了就懂)(推荐)
Mar 29 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
Apr 11 Javascript
vue 限制input只能输入正数的操作
Aug 05 Javascript
vue项目打包后请求地址错误/打包后跨域操作
Nov 04 Javascript
跟混乱的页面弹窗说再见
Apr 11 #Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
Apr 11 #Javascript
vue实现todolist基本功能以及数据存储功能实例详解
Apr 11 #Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
Apr 11 #Javascript
使用Vue父子组件通信实现todolist的功能示例代码
Apr 11 #Javascript
详解jQuery设置内容和属性
Apr 11 #jQuery
js作用域和作用域链及预解析
Apr 11 #Javascript
You might like
用PHP动态生成虚拟现实VRML网页
2006/10/09 PHP
php 验证码制作(网树注释思想)
2009/07/20 PHP
php表单转换textarea换行符的方法
2010/09/10 PHP
php学习之function的用法
2012/07/14 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
2013/06/24 PHP
PHP判断远程图片是否存在的几种方法
2014/05/04 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
捕获键盘事件(且兼容各浏览器)
2013/07/03 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
解释&&和||在javascript中的另类用法
2014/07/28 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
2015/03/13 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
python实现rest请求api示例
2014/04/22 Python
Python实现HTTP协议下的文件下载方法总结
2016/04/20 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
appium+python adb常用命令分享
2020/03/06 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
python3处理word文档实例分析
2020/12/01 Python
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
在职人员函授期间自我评价分享
2013/11/08 职场文书
安全演讲稿开场白
2014/08/25 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
发布会邀请函
2015/01/31 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书