视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Vue开发Html5微信公众号的步骤
2020-11-27 21:58:59 责编:小采
文档
具体参考官方文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6

(1)大致流程:

(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方法会根据签名的复杂程度返回不同长短的Base,过长的Base传到后台会增加服务器负担,所以需要转成平时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 - 获取签名Base(注意:该Base指签名那一块,不是整个页面)
 
 // 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();
 
 // Base 转 Blob 实现提交图片
 let uploadImg = this.dataURLtoFile(SignSrc);
 
 let param = new FormData(); //创建form对象
 param.append("file", uploadImg,'signImage.png'); 
 
 // send request...
 },
 // Base转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等功能啦!

下载本文
显示全文
专题