1.前言
https://developers.weixin.qq.com/minigame/dev/tutorial/open-ability/payment.html
开通虚拟支付的前提:你注册的微信公众平台账号的主体是公司。
若是你注册的是个人账号,则不能更改。
开通成功会获得如下参数:
offerid、secret、
代码中需要的参数:
appid、appsecret、
access_token、
openid、session_key
2.代码
common.js---------------
appid: "wx11111111",
appsecret: "abcdefg",
offerid: "123456789", //在米大师中申请的应用id
url:{
path4: "https://api.weixin.qq.com/", //扣游戏币url
pay1: "cgi-bin/midas/pay", //扣游戏币
pay2: "cgi-bin/midas/sandbox/pay", //扣游戏币测试
},
userLoginData: {}, //用户信息(nickName,avatarUrl,gender,time第1次进入游戏时间,openId,sessionKey)
httpRequest: function(url, data, call = function(){}, sync = false, method = 'POST', json = false){ //默认'POST',根据情况设置为'GET'
if(!(cc.sys.platform === cc.sys.WECHAT_GAME)) return;
if(json){
wx.request({
url: url,
data: data,
method: method || "POST",
header: {'content-type': 'application/json'},
success(res){call(res);},
fail(){call();}
});
}else{
wx.request({
url: url,
data: data,
method: method || "POST",
header: {'content-type': 'application/x-www-form-urlencoded'},
success(res){call(res);},
fail(){call();}
});
}
},
shop.js---------------
var sha256 = require('sha256');
onBuyBtn: function(event, index){ //购买按钮
this.playBtnSound();
var self = this;
if(cc.sys.platform === cc.sys.OS_ANDROID){ //android平台
var moneyList = [1, 6, 12];
//虚拟支付的流程:支付、扣游戏币(需要access_token、openid、session_key)
wx.requestMidasPayment({
mode: 'game',
offerId: '', //在米大师侧申请的应用 id
buyQuantity: 10 * moneyList[index - 1],
zoneId: 1,
env: 1, //0米大师正式环境,1米大师沙箱环境
currencyType: CNY,
platform: android,
success() { // 支付成功
console.log("支付成功!" + moneyList[index - 1] + "元");
//获得access_token
common.httpRequest("https://api.weixin.qq.com/cgi-bin/token",
{
grant_type: client_credential,
appid: common.appid,
secret: common.appsecret
},
function(data){
console.log("获得access_token成功:", data);
var accessToken = data.data.data.access_token;
//扣游戏币
var now = Date.now();
var billNum = common.app_name + "_" + now + "_" + Math.floor(Math.random() * (titleList.length - 1 + 1) + 1);
var stringA = "appid=" + common.appid + "&offer_id=" + common.offerid + "&openid=" + common.userLoginData.openId + "pf=android&ts=" + now + "&zone_id=1";
var stringB = stringA + "&org_loc=/" + common.url.pay2 + "&method=POST&secret=" + common.paySecret;
var sigStr = sha256.hex_hmac_sha256(common.paySecret, stringB);