前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信开发-微信分享和支付模块代码记录

微信开发-微信分享和支付模块代码记录

作者头像
何处锦绣不灰堆
发布2022-05-09 19:29:13
1.1K0
发布2022-05-09 19:29:13
举报
文章被收录于专栏:农历七月廿一农历七月廿一

文章目录

微信H5开发【分享模块】

写在前面

微信的支付和分享模块都是需要使用微信内置的类,需要在微信app中使用的,所以如果脱离了微信的环境,很大程度是不可以进行使用的,这一点是需要知悉的,分享和支付基本上都是固定的一个代码写法!

准备工作
微信后台配置
  • js安全域名配置
在这里插入图片描述
在这里插入图片描述

PS:如果这里不配置,是没办法进行自定义分享的,分享出去也只是当前页面的一个链接地址,是没有对应的icon和链接隐藏的!

获取配置微信环境的参数

PS:这里说一下过程:后端需要提供一个接口,我们给他当前页面的host地址,也就是我们上面js配置的安全域名地址,然后该接口返回对应的微信环境配置的参数,供我们初始化微信环境使用!

引入weixin-js-sdk
代码语言:javascript
复制
let jweixin = require('weixin-js-sdk')
分享配置源码
代码语言:javascript
复制
    //accessToken是我们业务需要,不是微信需要,根据自己的业务需求进行即可 isHiddenLoading:true是我配置的请求不进行loading效果展示的字段,这里根据自己的配置进行
	configPay() {
		var that = this
		request({
			url: api.configInit + "?webUrl=" + location.href.split("#")[0] + "&accessToken=''",
			method: 'post',
			isHiddenLoading:true
		}).then(res => {
			var data = res.data
			jweixin.config({
				debug: !true,
				timestamp: data.timeStamp,
				appId: data.appId, // 必填,公众号的唯一标识
				timestamp: data.timeStamp, // 必填,生成签名的时间戳
				nonceStr: data.nonceStr, // 必填,生成签名的随机串
				signature: data.signature, // 必填,签名
				jsApiList: [
					'updateAppMessageShareData',
					'updateTimelineShareData',
					'onMenuShareAppMessage',
					'onMenuShareTimeline'
				] // 必填,需要使用的JS接口列表,这里需要啥就写啥
			});
		})
		let configIn = {
			title: '这是你的title',
			page: '/',
			desc: '这是你的描述信息',
			icon: '这是你的icon,只接受线上图片的icon,尽量不要使用本地的静态文件'
		}
		jweixin.ready(function() {
			console.log("开始准备分享配置...")
			// 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
			jweixin.updateAppMessageShareData({
				title: configIn.title, // 分享标题
				desc: configIn.desc, // 分享描述
				link: location.origin + location.pathname + '#', 
				imgUrl: configIn.icon, // 分享图标
				success: function() {}
			})
			// 自定义“分享到朋友圈”
			jweixin.updateTimelineShareData({
				title: configIn.title, 
				link: location.origin + location.pathname + '#' + configIn.page,
				desc: configIn.desc, 
				imgUrl: configIn.icon, 
				success: function() {}
			})
			//老版本分享好友是这个写法
			jweixin.onMenuShareAppMessage({
				title: configIn.title, 
				desc: configIn.desc, 
				link: location.origin + location.pathname + '#', 
				imgUrl: configIn.icon, 
				success: function() {}
			})
		});
	}

这里可以将上述代码写到一个js文件中,然后进行全局加载即可!也就是在main.js中引入即可

启动以后日志显示OK即可
在这里插入图片描述
在这里插入图片描述
注意事项

1、微信是不支持直接链接分享的,也就是如果你是别人给你的链接直接点开分享是不可以的 2、微信支持点击收藏以后分享出去 3、微信支持从公众号直接分享出去

微信H5开发支付模块

需要知道的点

1、这里的支付指的是微信的内部浏览器支付也就是微信所说的jsapi支付,不是微信外部的浏览器h5支付 2、jsapi支付是需要openID的,但是微信外部的h5支付是不需要的 3、网上的授权域名不要忘记配置,同上

步骤解读

页面第一步是获取用户的code—》根据code获取用户的openID----〉根据openID进行处理支付相应的逻辑

获取用户code源码分享
代码语言:javascript
复制
mounted() {
			this.code = this.GetQueryString('code')
			if (this.code) {
			    //将code发送给后端,供他获取openID
				this.sendCode(this.code)
			}else{
			    //获取code
			    this.getCode()
			}
			
		},
methods:{
			getCode() {
				this.code = ''
				var local = window.location.href.split("#")[0]
				var appid = getApp().globalData.appid //这里是公众号的appid,写到一个全局的参数里面了
				this.code = this.GetQueryString('code')
				if (this.code == null || this.code === '') {
					window.location.href =
						`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect`
				} else {
					// this.sendCode(this.code)
				}
			},
		 /**
		 * @param {Object} name 获取url中的参数
		 */
		GetQueryString(name) {
			console.log(name)
			var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
			var r = window.location.search.substr(1).match(reg);
			if (r != null) return decodeURI(r[2]);
			return null;
		},
	    //将code给后端
		sendCode(code) {
				let that = this
				request({
					url: api.getOpenIdApi + "?code=" + code,
					method: "get",
				}).then(res => {
					console.log(res)
					if (res.success) {
						// that.tipToast("获取openId成功")
					} else {
						// that.tipToast("获取openId失败")
					}
				}).catch(err => {
					console.log(err)
					// that.tipToast("获取openId失败===》")
				})
			},
		}

ps:sendCode将code通过接口给到后端,后端会将openID返回给你,这里处理的时候,你可以不进行存储openID,因为你后面也可以不进行传输openID,这个后端通过你给的code进行openID的获取,获取到了就可以,至于你存还是他存都无所谓,但是尽量是后端进行存储,因为openID是用户的唯一凭证,尽量不要放到前端!到这里支付前期的openID准备工作就结束了!

支付源码分享
代码语言:javascript
复制
/**
 * @Description: 工具类mixins
 * @author:clearlove
 * @param 
 * @return 
 * @createTime: 1/7/2022, 3:00:33 PM
 */
import {
	api
} from '@/utils/apis'
import {
	request
} from '@/utils/request.js'
export const pay = {
	data() {
		return {}
	},
	methods: {
		//根据openId获取支付参数
		_createOrder(params) {
			let that = this
			uni.setStorageSync('orderNo', params.orderNo)
			request({
				url: api.h5Pay,
				method: "post",
				data: {
					totalAmount: params.orderAmount,
					description: params.orderContent,
					outTradeNo: params.orderNo,
					attach: "",
					openId: ""
				},
			}).then((res) => {
				if (res.success) {
					let params = {
						appId: res.data.appId ? res.data.appId : "",
						timeStamp: res.data.timeStamp ?
							res.data.timeStamp.toString() : "",
						nonceStr: res.data.nonceStr ?
							res.data.nonceStr : "",
						package: res.data.pkg ? res.data.pkg : "",
						signType: res.data.signType ?
							res.data.signType : "",
						paySign: res.data.paySign ? res.data.paySign : "",
					};
					that.payWechart(params)
				} else {
					//获取参数失败
				}
			}).catch((err) => {
				console.log(err);
			});
		},
		/**
		 * @param {Object} params 微信内部H5支付
		 */
		payWechart(params) {
			let that = this
			WeixinJSBridge.invoke(
				'getBrandWCPayRequest', params,
				function(res) {
					if (res.err_msg == "get_brand_wcpay_request:ok") {
					      uni.navigateTo({
								url:'/pages/activity/success'
							})
					} else if (res.err_msg == "get_brand_wcpay_request:cancel") {
					    uni.navigateTo({
								url:'/pages/activity/cancel'
							})
					} else {
					    uni.navigateTo({
								url:'/pages/activity/error'
							})
					}
				}
			)
		},
	}
}

PS:知道有人看完以后会骂我,说写的什么玩意,也没说怎么用,也没说参数,这里说一下,上面这一段代码是封装的微信支付的功能,封装在mixins里面的,也就是说我们使用的时候需要的过程是下面这样的

如何使用该js
引入mixins
代码语言:javascript
复制
import { pay } from '@/mixins/pay.js'
mixins: [utils, pay],
//这个是vue的固定写法,引入mixins
进行统一下单
代码语言:javascript
复制
comfirmPay() {
				//唤醒支付
	let params = {
			orderNo: JSON.parse(uni.getStorageSync('payParams')).orderNo, 
			orderContent: JSON.parse(uni.getStorageSync('payParams')).orderContent,
			totalAmount: JSON.parse(uni.getStorageSync('payParams')).orderAmount 
				}
		    this._createOrder(params)
	},

ps:这里的写法也不是固定的,因为统一下单的接口是你们后端提供的,他需要什么参数你对应进行更改自己需要的参数即可,更改以后在mixins的pay.js中进行对应的调整,_createOrder这个函数就是上面pay.js中写的第一个函数,他的一个过程是 统一下单(后端的接口)----》获取下单返回参数(微信拉起支付所需要的appid和验证签名等参数)—〉拉起微信支付——》判断用户是不是已经支付结束(这个是微信的固定写法,分为支付成功、失败、取消【也就是用户输入密码的时候点击了左上角的叉】)

写到后面

如果按照上述的过程还是出现了一些别的问题,可以下方留言进行讨论,微信的分享和支付还是不少坑的,但是总体对接下来难度确实是不大的,都是一些现成的api供我们使用的!小生不才,写的过程中有任何问题希望不要恶语相向,直接指出来,鄙人会及时修改!

文档链接

微信支付文档大全 jsapi支付 微信文档大全 微信支持功能文档大全

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 微信H5开发【分享模块】
    • 写在前面
      • 准备工作
      • 微信H5开发支付模块
        • 需要知道的点
          • 写到后面
          相关产品与服务
          访问管理
          访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档