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 相关文章推荐
Javascript 通过json自动生成Dom的代码
Apr 01 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
Apr 27 Javascript
JavaScript如何自定义trim方法
Jul 28 Javascript
js判断某个字符出现的次数的简单实例
Jun 03 Javascript
react系列从零开始_简单谈谈react
Jul 06 Javascript
Node.js服务器开启Gzip压缩教程
Aug 11 Javascript
js获取css的各种样式并且设置他们的方法
Aug 22 Javascript
Webpack devServer中的 proxy 实现跨域的解决
Jun 15 Javascript
函数式编程入门实践(一)
Apr 20 Javascript
axios异步提交表单数据的几种方法
Aug 11 Javascript
Vue axios 将传递的json数据转为form data的例子
Oct 29 Javascript
ant-design表单处理和常用方法及自定义验证操作
Oct 27 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 HtmlReplace输入过滤安全函数
2010/07/03 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
PHP统一页面编码避免乱码问题
2015/04/09 PHP
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
json 定义
2008/06/10 Javascript
Prototype Template对象 学习
2009/07/19 Javascript
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
javascript关于运动的各种问题经典总结
2015/04/27 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
简单实现的JQuery文本框水印插件
2016/06/14 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
2016/07/14 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
Bootstrap CSS组件之导航(nav)
2016/12/17 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
详解Python中正则匹配TAB及空格的小技巧
2019/07/26 Python
PHP统计代码行数的小代码
2019/09/19 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
python中提高pip install速度
2020/02/14 Python
Python使用Pygame绘制时钟
2020/11/29 Python
Django数据统计功能count()的使用
2020/11/30 Python
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
澳大利亚在线消费电子产品商店:TobyDeals
2020/01/05 全球购物
学校司机岗位职责
2013/11/14 职场文书
座谈会主持词
2014/03/20 职场文书
艺术节主持词
2014/04/02 职场文书
安全生产管理责任书
2014/04/16 职场文书
计算机多媒体专业自荐信
2014/07/04 职场文书
导游词之无锡唐城
2019/12/12 职场文书
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python