前端微信支付代码(公众号支付)
一.场景 (完成代码见附录)
其他商户跳转到我们支付页面,传入参数openId,fromTradeType,订单号,流水号,借由我们页面进行微信支付。具体在小程序后台如何配置,见微信官方文档。
二.包引入部分
import _ from "lodash";
引入lodash主要使用防抖功能
三.控制微信支付按钮显示隐藏的代码
this.showWxPay = this.isWeChat() && tmp.subOpenId;isWeChat() {let ua = window.navigator.userAgent.toLowerCase();if (ua.match(/MicroMessenger/i) == "micromessenger") {return true; //是微信内部} else {return false;}},
满足1.是在微信内核进入。2.传入了openId
四.点击微信支付后的流程代码
wxPay: _.debounce(function () {let url = ""; //接口获取后端timeStamp,nonceStr等微信支付拉起的参数let data = this.wxParams;if (!this.passJudge(data)) { //对进入的数据进行判读,必须每一个数据都是存在的//对参数做一次校验return;}this.$axios.post({url,data,headers: { "Content-Type": "application/json" },}).then((res) => {this.$emit("getPayResult",);let judge =res.hasOwnProperty("data") &&res.data.hasOwnProperty("ERRCODE") &&res.data.ERRCODE == "000000" &&res.status == "SUCCESS";if (judge) {let _data = res.data;this.weChatParameter = { //记录拉起支付的参数//微信搭桥需要的数据appid: _data.appId || "",timeStamp: _data.timeStamp || "",nonceStr: _data.nonceStr || "",package: _data.package || "",signType: _data.signType || "",paySign: _data.paySign || "",};this.weixinPay(); //微信内置对象判断} else {this.$message({message: res.retMsg || "提交订单失败",type: "warning",});}}).catch((error) => {this.$message({message: "提交订单失败",type: "warning",});});}, 240),
其中,passJudge函数为:
passJudge(data) {if (!data) {this.$message.error("缺少请求参数");return false;}if (!data.reOrderNo) {this.$message.error("缺失参数:reOrderNo");return false;}if (!data.tranNo) {this.$message.error("缺失参数:tranNo");return false;}if (!data.subOpenId) {this.$message.error("缺失参数:subOpenId");return false;}if (!data.fromTradeType) {this.$message.error("缺失参数:fromTradeType");return false;}return true;},
五.进行微信搭桥,进行环境处理
let that = this;if (typeof WeixinJSBridge == "undefined") {if (document.addEventListener) {document.addEventListener("WeixinJSBridgeReady",that.onBridgeReady(),false);} else if (document.attachEvent) {document.attachEvent("WeixinJSBridgeReady", that.onBridgeReady());}} else {that.onBridgeReady();}
六.环境准备好后,拉起支付
onBridgeReady() {let that = this;let timestamp = Math.round(this.weChatParameter.timeStamp).toString();window.WeixinJSBridge.invoke("getBrandWCPayRequest",{appId: that.weChatParameter.appid, //公众号名称,由商户传入timeStamp: timestamp, //时间戳,自1970年以来的秒数nonceStr: that.weChatParameter.nonceStr, //随机串package: that.weChatParameter.package,signType: that.weChatParameter.signType, //微信签名方式:paySign: that.weChatParameter.paySign, //微信签名// jsApiList: ["chooseWXPay"],},function (res) {that.$emit("getPayResult",`拉起支付返回结果为:${JSON.stringify(res)}`);// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。if (res.err_msg == "get_brand_wcpay_request:ok") {//支付成功that.$emit("toSuccess");} else if (res.err_msg == "get_brand_wcpay_request:cancel") {//取消支付} else {//支付失败that.$emit("toFail");}});},
七.附录:完整代码
<template><div class="check-box" @click="wxPay"><img src="../../../assets/images/normal/pay/phone.png" class="check-img" /><div class="check-word">微信支付</div></div>
</template><script>
import _ from "lodash";
import Bus from "@/utils/bus.js";
export default {data() {return {weChatParameter: "",};},props: {wxParams: {type: Object,default: {},},},created() {},mounted() {Bus.$on("getDetail", (amount, settlementNo, reconciliationTime) => {this.payAmount = amount;this.amount = amount;this.settlementNo = settlementNo;this.reconciliationTime = reconciliationTime;});},components: {},computed: {},watch: {},methods: {wxPay: _.debounce(function () {let url = "";let data = this.wxParams;this.$emit("changeWay", 3);if (!this.passJudge(data)) {//对参数做一次校验return;}this.$axios.post({url,data,headers: { "Content-Type": "application/json" },}).then((res) => {this.$emit("getPayResult","进入/cashier/PublicPay,数据为:" + JSON.stringify(res));let judge =res.hasOwnProperty("data") &&res.data.hasOwnProperty("ERRCODE") &&res.data.ERRCODE == "000000" &&res.status == "SUCCESS";if (judge) {let _data = res.data;this.weChatParameter = {//微信搭桥需要的数据appid: _data.appId || "",timeStamp: _data.timeStamp || "",nonceStr: _data.nonceStr || "",package: _data.package || "",signType: _data.signType || "",paySign: _data.paySign || "",};this.weixinPay(); //微信内置对象判断} else {this.$message({message: res.retMsg || "提交订单失败",type: "warning",});}}).catch((error) => {this.$message({message: "提交订单失败",type: "warning",});});}, 240),weixinPay() {let that = this;if (typeof WeixinJSBridge == "undefined") {if (document.addEventListener) {document.addEventListener("WeixinJSBridgeReady",that.onBridgeReady(),false);} else if (document.attachEvent) {document.attachEvent("WeixinJSBridgeReady", that.onBridgeReady());}} else {that.onBridgeReady();}},//微信内置浏览器类onBridgeReady() {let that = this;let timestamp = Math.round(this.weChatParameter.timeStamp).toString();this.$emit("getPayResult","进入onBridgeReady,数据为:" + JSON.stringify(that.weChatParameter));window.WeixinJSBridge.invoke("getBrandWCPayRequest",{appId: that.weChatParameter.appid, //公众号名称,由商户传入timeStamp: timestamp, //时间戳,自1970年以来的秒数nonceStr: that.weChatParameter.nonceStr, //随机串package: that.weChatParameter.package,signType: that.weChatParameter.signType, //微信签名方式:paySign: that.weChatParameter.paySign, //微信签名// jsApiList: ["chooseWXPay"],},function (res) {that.$emit("getPayResult",`拉起支付返回结果为:${JSON.stringify(res)}`);// 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。if (res.err_msg == "get_brand_wcpay_request:ok") {//支付成功that.$emit("toSuccess");} else if (res.err_msg == "get_brand_wcpay_request:cancel") {//取消支付} else {//支付失败that.$emit("toFail");}});},passJudge(data) {if (!data) {this.$message.error("缺少请求参数");return false;}if (!data.reOrderNo) {this.$message.error("缺失参数:reOrderNo");return false;}if (!data.tranNo) {this.$message.error("缺失参数:tranNo");return false;}if (!data.subOpenId) {this.$message.error("缺失参数:subOpenId");return false;}if (!data.fromTradeType) {this.$message.error("缺失参数:fromTradeType");return false;}return true;},},
};
</script><style lang="scss" scoped>
.check-box {padding: 0px 10px;height: 28px;display: flex;justify-content: center;align-items: center;border: 1px solid rgb(220, 220, 220);margin-left: 10px;cursor: pointer;.check-img {width: 18px;height: 18px;}.check-word {margin-left: 5px;font-size: 14px;}
}
</style>
前端微信支付代码(公众号支付)相关推荐
- 微信支付 php详解,微信支付之公众号支付详解
本文主要和大家分享微信支付之公众号支付详解,随着微信支付的流行,大多产品都开发了自己的公众号.小程序等,产品的营销需要支付的支撑,最近做了个微信公号号支付,采坑无数,今天给大家分享一下,希望能帮助到大 ...
- php微信公众号支付实例教程,php微信支付之公众号支付功能
这篇文章主要为大家详细介绍了php微信支付之公众号支付功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 网上的很多PHP微信扫码支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后 ...
- 微信支付、公众号支付、微信APP支付教程
这两天有朋友问我微信支付的一些事情,我就抽了点时间整理了一下微信支付相关的一些东西,在这里分享给大家,希望能帮助大家少走弯路. 微信支付分为APP支付和公众号支付两大类,其中公众号支付又分为(公众号支 ...
- APP支付和公众号支付区别在哪?
PP支付与公众号支付容易搞混淆,尤其对于一些半专业的外行人来说,傻傻分不清. 随着移动支付的盛行,或者说随着微信社交产品的全民普及,再加上消费者被一轮又一轮的支付大战烧脑,再不懂支付的也都了解那么丁点 ...
- 什么是APP支付和公众号支付
APP支付与公众号支付容易搞混淆,尤其对于一些半专业的外行人来说,傻傻分不清. 随着移动支付的盛行,或者说随着微信社交产品的全民普及,再加上消费者被一轮又一轮的支付大战烧脑,再不懂支付的也都了解那么丁 ...
- 微信支付(公众号支付)微信公众平台开发教程(5)
简介 Senparc.Weixin SDK 是由盛派网络(Senparc)团队自主研发的针对微信各模块的 开发套件(C#SDK), 已全面支持微信公众号.微信支付.企业号.开放平台.JSSDK.摇一摇 ...
- 微信h5支付和公众号支付、支付宝h5支付
1.微信h5支付: 首先是支付参数的构建,这个需要通过后台进行组装,后台会跟微信进行数据的交互,而你所需要做的是拿到返回的数据,然后传递给微信的JSSDK,由微信的JSSDK进行后续操作,比如说先跳转 ...
- 微信支付之公众号支付
经过近一周的敲代码,终于把公众号支付和H5支付实现完成并测试通过,特此分享一些流程,一方面自己记录另一方面给新入门的一点思路 [本文介绍普通商户的公众号支付] 一.基本信息和配置 公众号支付的前提是要 ...
- 【微信开发】---- 公众号支付
公众号支付就是在微信里面的H5页面唤起微信支付,不用扫码即可付款的功能.做这个功能首先要明确的就是,只有和商户号mch_id匹配的appid才能成功支付.商户号在注册成功的时候就会将相关信息发送到邮箱 ...
- 微信H5支付、非微信H5支付、公众号支付、小程序支付
文章目录 前言 一.微信H5支付和非微信H5支付 二.公众号支付 三.小程序支付 总结 前言 最近公司又要搞微信支付,大体上就是把app上VIP那一套内容但做成网页版,更方便用户去购买vip,老板就让 ...
最新文章
- 测试linux nginx,linux系统肿么检测安装了nginx
- 收藏 | EfficientNet模型的完整细节
- ubuntu14.04-64位机配置android开发环境,ADT,sdk,eclipsea
- jenkins 持续集成, 使用sbt多项目同时package
- python数据挖掘笔记】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取
- 美国:DFA(Dimensional fund advisors LP)基金介绍
- 神经网络的归一化(batch normalization)
- 计算机四级网络工程师题库及详细知识点大全
- XML学习之做过的实验——实验二
- matlab灵敏度分析操作,灵敏度分析 使用MATLAB编写.doc
- 服装尺寸 html,服装尺寸S、M、L、XL、XXL分别表示的型号大小和释义(完整版)...
- 50.新拟物卡片悬停特效
- HTML5雨滴特效,晶莹剔透
- 某直播APP逆向TCP协议分析
- 小米2019秋招软件开发笔试题A选择部分解析
- 两化融合给企业带来的实际意义
- 我司何晓磊续签立命馆大学的客座研究员
- 工信部就垃圾短信问题约谈7家虚拟运营商
- 京东上传图片到JD API接口
- Echo命令和Export命令
热门文章
- 涡旋电磁波:无线通信的革命
- IDM下载器Windows系统是最快的下载工具
- 如何分析软件安全性需求
- react+ant启动服务时太慢解决方案
- 手把手教你 | 识别色环电阻/贴片电阻阻值
- 超市仓库商品盘点作业流程,仓库如何进行盘点,仓库盘点流程?仓库盘点好方法?
- 想要内推字节跳动的同学看过来(含内推方式)
- MongoDB是什么?看完你就知道了!
- h5页面 请在微信客户端打开链接_模拟微信接口时,提示“请在微信客户端打开链接”(转)...
- npm安装ionic相关设置