115 lines
2.8 KiB
JavaScript
115 lines
2.8 KiB
JavaScript
|
/**
|
|||
|
* 微信支付相关函数
|
|||
|
*/
|
|||
|
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;
|