9433cfb9创建于 2025年12月31日历史提交
/**
 * 微信支付相关函数
 */
var wxpay = {
	async getAccessToken(data) {
		let {
			appId,
			secret,
			force_refresh,
		} = data;
		let res = await uniCloud.httpclient.request("https://api.weixin.qq.com/cgi-bin/stable_token", {
			method: 'POST',
			data: {
				appid: appId,
				secret: secret,
				grant_type: "client_credential",
				force_refresh
			},
			contentType: 'json', 
			dataType: 'json' ,
		});
		let result = res.data || {};
		if (!result.access_token) {
			return {
				errCode: -1,
				errMsg: result.errmsg
			}
		}
		return {
			errCode: 0,
			errMsg: 'ok',
			accessToken: result.access_token,
			expiresIn: result.expires_in
		}
	},
	async getOpenid(data) {
		let {
			provider_pay_type
		} = data;
		if (provider_pay_type === "jsapi") {
			return this._getJsOpenid(data);
		} else {
			return this._getMpOpenid(data);
		}
	},
	async _getMpOpenid(data) {
		let {
			config = {},
				code,
				provider_pay_type
		} = data;
		if (!config.appId) throw new Error("uni-pay配置wxpay.mp节点下的appId不能为空");
		if (!config.secret) throw new Error("uni-pay配置wxpay.mp节点下的secret不能为空");
		let res = await uniCloud.httpclient.request("https://api.weixin.qq.com/sns/jscode2session", {
			method: 'GET',
			data: {
				appid: config.appId,
				secret: config.secret,
				js_code: code,
				grant_type: "authorization_code"
			},
			contentType: 'json', // 指定以application/json发送data内的数据
			dataType: 'json' // 指定返回值为json格式,自动进行parse
		});
		if (res.data && !res.data.errcode && res.data.openid) {
			return {
				errCode: 0,
				errMsg: 'ok',
				openid: res.data.openid,
				unionid: res.data.unionid,
				session_key: res.data.session_key, // 此参数不可以暴露给前端
			}
		} else {
			return {
				errCode: -1,
				errMsg: res.data.errmsg
			}
		}
	},
	async _getJsOpenid(data) {
		let {
			config = {},
				code,
				provider_pay_type
		} = data;
		if (!config.appId) throw new Error("uni-pay配置wxpay.jsapi节点下的appId不能为空");
		if (!config.secret) throw new Error("uni-pay配置wxpay.jsapi节点下的secret不能为空");
		let res = await uniCloud.httpclient.request("https://api.weixin.qq.com/sns/oauth2/access_token", {
			method: 'GET',
			data: {
				appid: config.appId,
				secret: config.secret,
				code: code,
				grant_type: "authorization_code"
			},
			contentType: 'json', // 指定以application/json发送data内的数据
			dataType: 'json' // 指定返回值为json格式,自动进行parse
		});
		if (res.data && !res.data.errcode && res.data.openid) {
			return {
				errCode: 0,
				errMsg: 'ok',
				openid: res.data.openid,
				unionid: res.data.unionid,
			}
		} else {
			return {
				errCode: -1,
				errMsg: res.data.errmsg
			}
		}
	}
};
module.exports = wxpay;