【字节跳动】字节跳动接入(含登录,支付)

环境:

客户端:cocos creator2.4.3

服务器:openresty

官方网站:https://microapp.bytedance.com/docs/zh-CN/mini-game/develop/open-capacity/log-in/tt-login

1.登录。目前不能使用匿名登录必须强制授权。

客户端:使用官方提供的示例代码即可。

tt.login({
  force: true,
  success(res) {
    console.log(`login 调用成功${res.code} ${res.anonymousCode}`);
  },
  fail(res) {
    console.log(`login 调用失败`);
  },
});

得到code拿来登录。

服务器:登录换取openid

function utils.request_verify_session_byte(code, anonymous_code)
	local httpc = http.new()
	local params = "appid="..byteapppid.."&secret="..bytesecret.."&code="..code
	return httpc:request_uri("https://developer.toutiao.com/api/apps/jscode2session?"..params, {
		method = "GET",
	})	
end

-- byteappid 字节的app id
-- bytesecret 字节的secret id
-- code 客户端登录获得的
-- 成功返回 open id

2.支付

准备工作:在字节管理后台设置支付参数

客户端调起支付界面前,需要向自己的服务器创建订单,已获得订单ID:order_id.

客户端流程:

1.请求开发后端创建订单order_id.

2.调起支付:

let payData = {
     mode: 'game', // 支付类型
     env: 0, //支付环境
     currencyType: "CNY", // 币种:目前仅为 "CNY"
     platform: "android", // 申请接入时的平台:目前仅为"android"
     buyQuantity: buyData.productPrice, // 购买数量,必须满足:金币数量*金币单价 = 限定价格等级(详见金币限定等级)
     zoneId: "1",
     customId: orderID, //开发者自定义唯一订单号。如不填,支付结果回调将不包含此字段,将导致游戏开发者无法发放游戏道具, 基础库版本低于1.55.0没有此字段
     extraInfo: JSON.stringify({
           userId: userID,   //用户自定义额外信息,支付结果回调信息包含此字段, 基础库版本低于1.55.0没有此字段
           version: "v0.0.0",
           price: productPrice,
     }),//extraInfo要转成字符串
     success(res) {
           console.log("字节跳动支付调用成功:", res);
     },
     fail(res) {
           console.log("字节跳动支付调用失败:", res);                                       
     },
}
tt.requestGamePayment(payData)

 3.支付成功之后,字节服务器会回调上一步页面配置的回调地址。顺便说一下,这个回调地址配置完成后,需要在页面进行验证,验证req的参数都放在query里的,处理代码大概是这个样子的(openresty)

pay_router:get("/cb", function(req, res, next)
	local signature = ngx.escape_uri(req.query["signature"])
	local msg = ngx.escape_uri(req.query["msg"])
	local echostr = ngx.escape_uri(req.query["echostr"])
	local nonce = ngx.escape_uri(req.query["nonce"])
	local timestamp = ngx.escape_uri(req.query["timestamp"])	

	local token = cfg.bytetoken
    local params = {token, timestamp, nonce, msg}
    table.sort(params)
    local str = table.concat(params)
    local sign = string.lower(utils.bin2hex(ngx.sha1_bin(str)))
    if sign == signature then
        ngx.log(ngx.ERR, "byte  get cb success")
    else
        ngx.log(ngx.ERR, "byte  get cb failed.data=",  utils.json_encode(req),".our sign:", sign, ",byte sign:", signature)
    end

	ngx.print(echostr)
end)

正式支付的时候,回调发起的是POST方法,接口名不变,处理代码大概是这个样子的:

pay_router:post("/cb", function(req, res, next)
    local body = req.body
	local token = cfg.bytetoken
	ngx.log(ngx.ERR, "bytepay cb: req:", utils.json_encode(req))
    local params = {token, body.timestamp, body.nonce, body.msg}
    table.sort(params)
    local str = table.concat(params)
    local sign =string.lower(utils.bin2hex(ngx.sha1_bin(str)))
	if body.signature == sign then
		ngx.log(ngx.ERR, "bytepay check signature ok")
		local status = 'success'
		local msg = utils.json_decode(body.msg)
        -- 充值OK,下发充值物品。
		local ret = game_pay(utils.json_decode(msg.cp_extra).userId, msg.cp_orderno)
		if ret.errCode ~= 0 then
			res:json({''})
		else
			res:json({body.echostr})
		end
	else
		ngx.log(ngx.ERR, "bytepay pay cb sign check err. own sign= ", sign, ".byte sign=", body.signature)
		res:json({''})
	end
end)

其他接口可参考官方文档进行补充,比如获取玩家充值货币,轮询进行补单等。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值