From 02fde78d1df48ccb6b3af5a04d732367dbcbb24d Mon Sep 17 00:00:00 2001 From: 宋庆平 Date: Tue, 20 Sep 2022 18:48:58 +0800 Subject: [PATCH] X --- sdk/shareTools.ts | 5 ----- wxsdk/base/SDKConst.ts | 11 +++++++---- wxsdk/http/SDKApi.ts | 1 + wxsdk/qq/QQPay.ts | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wxsdk/service/GameService.ts | 12 +++++++++--- 5 files changed, 182 insertions(+), 12 deletions(-) create mode 100644 wxsdk/qq/QQPay.ts diff --git a/sdk/shareTools.ts b/sdk/shareTools.ts index f21fb75..26ba687 100644 --- a/sdk/shareTools.ts +++ b/sdk/shareTools.ts @@ -67,8 +67,3 @@ export class ShareTools { } } - - - -export enum ShareKey { -} diff --git a/wxsdk/base/SDKConst.ts b/wxsdk/base/SDKConst.ts index 49a0489..bd82e29 100644 --- a/wxsdk/base/SDKConst.ts +++ b/wxsdk/base/SDKConst.ts @@ -24,8 +24,8 @@ export const GAMEDATA = { typ: 1,//分享类型 写死1 videoid: '',//默认的视频广告id 填空就行 }, - MidasPay: { // 米大师虚拟支付配置 *找运营提供 - OfferId: "9999999999", // 在米大师申请的应用id *找运营提供 + MidasPay: { // 米大师虚拟支付配置 + OfferId: "xxxx", // 在米大师申请的应用id ZoneId: "1", // 分区ID,默认:1 Mode: "game", // 默认:game CurrencyType: "CNY", // 默认:CNY @@ -33,8 +33,9 @@ export const GAMEDATA = { } } + // sdk版本 -export const SDKVersion = 'v1.0.11'; +export const SDKVersion = 'v1.0.12'; // 是否打印 export const __LOG__ = false; // 是否mock @@ -110,11 +111,13 @@ export const HostKeys = { behavior: 'api/douyin/behavior', //抖音投放关键行为 attribute: 'api/member/attribute/set', //修改用户属性 wxencrypted: 'api/wx/encrypted', + //订单 - orderReport: 'api/order/v2/mimas/new', //订单信息上报 + orderReport: 'api/order/v2/mimas/new', //wx订单信息上报 orderQuery: 'api/order/query', //订单信息查询 preorder: 'api/order/v2/preorder', //获取支付方式 bytedanceOrderReport: 'api/order/v2/bytedance', //字节订单信息上报 + qqOrderReport: 'api/order/v2/qq', //qq订单信息上报 // goodslist: 'api/v2/goodslist', //商品列表 }; diff --git a/wxsdk/http/SDKApi.ts b/wxsdk/http/SDKApi.ts index a29a795..cac623f 100644 --- a/wxsdk/http/SDKApi.ts +++ b/wxsdk/http/SDKApi.ts @@ -78,6 +78,7 @@ export class SDKApi { // OrderApi public static pay = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.orderReport, ...args); public static bytedanceOrderReport = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.bytedanceOrderReport, ...args); + public static qqOrderReport = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.qqOrderReport, ...args); public static orderQuery = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.orderQuery, ...args); public static preorder = (...args) => SDKHttp.httpPost(DataService.I.OrderApi, HostKeys.preorder, ...args); diff --git a/wxsdk/qq/QQPay.ts b/wxsdk/qq/QQPay.ts new file mode 100644 index 0000000..0067e1b --- /dev/null +++ b/wxsdk/qq/QQPay.ts @@ -0,0 +1,165 @@ +import { GAMEDATA } from '../base/SDKConst'; +import { EnvCode } from '../base/SDKEnum'; +import { SDKApi } from '../http/SDKApi'; +import DataService from '../service/DataService'; +import WxSystem from '../wx/WxSystem'; + +export default class QQPay { + /** + * 发起支付 + */ + pay(params: { payid: string, goodid: string, money: number; orderid: string }, opts: any = {}): Promise { + return new Promise((resolve, reject) => { + let { Mode, OfferId, ZoneId, CurrencyType, Platform } = GAMEDATA.MidasPay; + // 环境配置,0:米大师正式环境 1:米大师沙箱环境 + let env = DataService.I.EnvEnum === EnvCode.Prod ? 0 : 1; + // 平台类型,android or ios,config.js有配置走配置,否则判断系统id + let platform = DataService.I.Platform; + let pms = { + mode: Mode, + env, + platform, + offerId: OfferId, + currencyType: CurrencyType, + buyQuantity: params.money / 10, + zoneId: ZoneId + }; + let extend = ""; + for (let key in opts) { + extend += (`${key}=${opts[key]}&`) + } + extend = extend.substring(0, extend.length - 1); + extend = encodeURIComponent(extend); + + let payParams = { + ...this.buildParams(), + extend, + orderid: params.orderid, + // payid: params.payid, + goodid: params.goodid, + money: params.money, + platform + }; + console.log("payParams", payParams); + SDKApi.qqOrderReport(payParams).then(res => { + console.log("res", res); + if (!res.code) { + let { prepayId,starCurrency,setEnv } = res.data; + qq.requestMidasPayment({ + prepayId, + starCurrency, + setEnv, + success(res) { + // console.log("调用函数成功", res); + resolve({ code: 0, msg: '支付成功!' }) + }, + fail(err) { + // console.log("调用函数失败", res); + resolve({ code: err.errCode, msg: '支付失败' }); + }, + complete(res) { + console.log("调用完成", res); + }, + }) + } else { + reject(res); + } + }) + }); + } + + private async handlePaySuccess(data: { payid: string, goodid: string, money: number; orderid: string, platform: string }, opts: any, resolve: any, reject: any, t = 1000) { + let extend = ""; + for (let key in opts) { + extend += (`${key}=${opts[key]}&`) + } + extend = extend.substring(0, extend.length - 1); + extend = encodeURIComponent(extend); + let params = { + ...this.buildParams(), + extend, + midasenv: DataService.I.EnvEnum === EnvCode.Prod ? 0 : 1, + orderid: data.orderid, + payid: data.payid, goodid: data.goodid, + type: 1, + money: data.money, + platform: data.platform + }; + var that = this; + SDKApi.qqOrderReport(params) + .then(res => { + if (!res.code) { + resolve(res); + } else { + t = Math.min(t * 2, 60000) + // console.error("上报失败,重新上报", t) + setTimeout(() => { + that.handlePaySuccess(data, opts, resolve, reject, t) + }, t); + } + }) + } + + private handlePayError(data: { payid: string, goodid: string, money: number; orderid: string, platform: string }, opts, err: any, reject: any) { + console.log("支付失败", JSON.stringify(err)); + let type = 2; + if (err.errCode + '' == '1') { + type = 3; + } + let extend = ""; + for (let key in opts) { + extend += (`${key}=${opts[key]}&`) + } + extend = extend.substring(0, extend.length - 1); + extend = encodeURIComponent(extend); + let params = { + ...this.buildParams(), + extend, + midasenv: DataService.I.EnvEnum === EnvCode.Prod ? 0 : 1, + orderid: data.orderid, + payid: data.payid, goodid: data.goodid, + type, + money: data.money, + platform: data.platform + }; + SDKApi.qqOrderReport(params) + reject(err); + } + + /** + * 构建支付公用参数 + */ + private buildParams() { + let gameid = GAMEDATA.game_id; + let channel = DataService.I.ChannelId; + let openid = DataService.I.OpenId; + let brand = WxSystem.I.brand; + let model = WxSystem.I.model; + let version = WxSystem.I.version; + let system = WxSystem.I.system; + let sdkversion = WxSystem.I.SDKVersion; + let scene = DataService.I.Scene + ''; + let uid = DataService.I.UserId; + let token = DataService.I.Token; + let env = DataService.I.EnvEnum === 1 ? 'pre' : 'prod'; + return { + gameid, + openid, + channel, + brand, + model, + version, + system, + sdkversion, + scene, + uid, + token, + env + }; + } + + private static _instance: QQPay; + static get I(): QQPay { + return this._instance || (this._instance = new QQPay); + } +} \ No newline at end of file diff --git a/wxsdk/service/GameService.ts b/wxsdk/service/GameService.ts index d438439..e0a568d 100644 --- a/wxsdk/service/GameService.ts +++ b/wxsdk/service/GameService.ts @@ -6,6 +6,7 @@ import WxApi from "../wx/WxApi"; import WxPay from "../wx/WxPay"; import WxSystem from "../wx/WxSystem"; import DouyinPay from "../douyin/DouyinPay"; +import QQPay from "../qq/QQPay"; export default class GameService { @@ -64,8 +65,8 @@ export default class GameService { return SDKApi.adList({ adtyp, uid: DataService.I.UserId, token: DataService.I.Token }) } - wxencrypted(iv,encryptedData) { - return SDKApi.wxencrypted({iv,encryptedData,openid:DataService.I.OpenId,token: DataService.I.Token,uid: DataService.I.UserId}) + wxencrypted(iv, encryptedData) { + return SDKApi.wxencrypted({ iv, encryptedData, openid: DataService.I.OpenId, token: DataService.I.Token, uid: DataService.I.UserId }) } @@ -107,7 +108,12 @@ export default class GameService { if (cc.sys.platform === cc.sys.BYTEDANCE_GAME) { return DouyinPay.I.pay(params, opts); } else { - return WxPay.I.pay(params, opts); + if (typeof qq != 'undefined') { + console.log("QQ支付") + return QQPay.I.pay(params, opts); + } else { + return WxPay.I.pay(params, opts); + } } } /** -- libgit2 0.21.0