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 相关文章推荐
jQuery插件开发全解析
Oct 10 Javascript
jQuery extend 的简单实例
Sep 18 Javascript
一个JavaScript去除字符串末尾的空白实例代码
Sep 22 Javascript
一个JavaScript获取元素当前高度的实例
Oct 29 Javascript
JS实现的通用表单验证插件完整实例
Aug 20 Javascript
详解微信小程序——自定义圆形进度条
Dec 29 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
Jun 22 Javascript
JS实现按钮控制计时开始和停止功能
Jul 27 Javascript
checkbox:click事件触发span元素内容改变的方法
Sep 11 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
Mar 21 Javascript
详解Vue前端对axios的封装和使用
Apr 01 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
Sep 24 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实现递归的三种方法
2020/07/04 PHP
用jscript实现新建和保存一个word文档
2007/06/15 Javascript
PHP开发者必须掌握的6个关键字
2014/04/14 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
javascript中Array数组的迭代方法实例分析
2015/02/04 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
javascript实现对表格元素进行排序操作
2015/11/18 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
jQuery zTree树插件的使用教程
2019/08/16 jQuery
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
jQuery实现电梯导航模块
2020/12/22 jQuery
[53:52]OG vs EG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python修改注册表终止360进程实例
2014/10/13 Python
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
python绘制热力图heatmap
2020/03/23 Python
Python 文本文件内容批量抽取实例
2018/12/10 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
python 提取文件指定列的方法示例
2019/08/07 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
职员竞岗演讲稿
2014/05/14 职场文书
主要负责人任命书
2014/06/06 职场文书
个人党性分析材料
2014/12/19 职场文书
大学生入党自传2015
2015/06/26 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
毕业欢送会致辞
2015/07/29 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
关于的python五子棋的算法
2022/05/02 Python
MySQL数据库配置信息查看与修改方法详解
2022/06/25 MySQL