UNPKG

thinkraz-api-sdk

Version:

橡芮科技API开发包

908 lines (885 loc) 37.8 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="../src/socket.lib.js"></script> <script src="../src/socket.min.js"></script> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script> <script src="https://cdn.bootcss.com/lrsjng.jquery-qrcode/0.14.0/jquery-qrcode.js"></script> </head> <body> <div id="start_area"> <a href="javascript:startOrder('simple')">普通订单</a> <a href="javascript:startOrder('member')">会员订单</a> <a href="javascript:startOrder('timescard')">次卡订单</a> <a href="javascript:startOrder('gym')">场馆订单</a> <a href="javascript:startOrder('card')">IC卡订单</a> <a href="javascript:startOrder('retail')">商品订单</a> <a href="javascript:startOrder('training')">培训订单</a> <!--<a href="javascript:fuck2()">狂刷场地占用</a>--> <label>场馆id:</label><input id="gym_input" value="10146401"> </div> <div id="gym_operation_area" hidden> <a href="javascript:cancelGymBookingOperation()">撤销场次</a> </div> <div id="card_operation_area" hidden> <a href="javascript:getCardData()">查询卡</a> <a href="javascript:registerCard()">注册卡</a> <a href="javascript:disableCard()">作废卡</a> <a href="javascript:changeCard()">换卡</a> <a href="javascript:resetCardPassword()">重设密码</a> <label>ic卡密码:</label><input id="pw_input" value=""> <label>ic卡卡号 :</label><input id="card_input" value=""> </div> <div id="member_operation_area" hidden> <a href="javascript:registerMemberFunc()">注册会员</a> <a href="javascript:topupMemberFunc()">会员充值</a> <a href="javascript:memberPrototypeFunc()">查询会员权限</a> <a href="javascript:bindICCard()">绑定IC卡</a> <input id="iccard_input" value="卡号"> <input id="iccard_pw_input" value="密码"> </div> <div id="training_operation_area" hidden> <a href="javascript:newTrainingClassFunc()">新课购买</a> <label>卡号:</label><input id="iccard_input_t" value="1507516268167"> <label>密码:</label><input id="iccard_pw_input_t" value=""> <label>出生年份:</label><input id="birthyear_t" value="1991"> </div> <div id="retail_operation_area" hidden> <a href="javascript:buyGoodsFunc()">购买商品</a> <a href="javascript:refundSub()">退部分单</a> <label>商品id:</label><input id="goods_id_input" value="1382c548add7d5a3c8183ec888151e60"> <label>数量:</label><input id="goods_amount_input" value="1"> <label>价格:</label><input id="goods_price_input" value="2"> <label>门面id:</label><input id="goods_strid_input" value="10146403"> </div> <div>============================================================================================================== </div> <div id="button_area" hidden> <button id="cashPay">付现金1分</button> <button id="authcodePay">扫码付1分</button> <input id="authcode_input"> <button id="wx_native_pay">被扫微信1分</button> <button id="ali_native_pay">被扫支付宝1分</button> <button id="free_pay">免费付1分</button> <button id="member_pay">会员付1分</button> <label>会员mid:</label> <input id="member_id" value="247684704754970852"> <button id="cancel_order">取消订单+退款</button> </div> <div id="nativeurl"></div> <div id="extra_console"></div> <div id="response"></div> <script> const mchid = '101464'; // const mchkey = '8cc9-7ad5-7d19-d903'; const _at = '528a1509c9d7f1f552db344ddf7aad99'; const cashAccount = '20170831132651579502856538590610'; const wxAccount = '20170831130923735530430208000141'; const baseUrl = 'http://order.api.bolopie.thinkraz.com/'; // const baseUrl = 'http://127.0.0.1:8081/'; const baseGymUrl = 'http://gym.api.bolopie.thinkraz.com/'; const baseMemberUrl = 'http://member.api.bolopie.thinkraz.com/'; // const baseMemberUrl = 'http://127.0.0.1:8084/'; const baseTimescardUrl = 'http://timescard.api.bolopie.thinkraz.com/'; const baseGoodsUrl = 'http://retail.api.bolopie.thinkraz.com/'; const cardUrl = 'http://card.api.bolopie.thinkraz.com/'; const merchantUrl = 'http://merchant.api.bolopie.thinkraz.com/'; // const trainingUrl = 'http://127.0.0.1:8080/'; const trainingUrl = 'http://training.api.bolopie.thinkraz.com/'; let paymentId = null; let orderId = null; let cancelGymBookingOperation = null; let registerMemberFunc = null; let topupMemberFunc = null; let memberPrototypeFunc = null; let getCardData = null; let registerCard = null; let disableCard = null; let resetCardPassword = null; let bindICCard = null; let changeCard = null; let buyGoodsFunc = null; let cashPay = $('#cashPay'); let authcodePay = $('#authcodePay'); let wxNativePay = $('#wx_native_pay'); let aliNativePay = $('#ali_native_pay'); let nativeurl = $('#nativeurl'); let cancelOrder = $('#cancel_order'); let authCodeInput = $('#authcode_input'); let freePay = $('#free_pay'); let memberPay = $('#member_pay'); let clickableFunctions = {}; function _useClickable(str) { console.log(str); clickableFunctions[str](); } function addClickable(str, cb) { let a = $(`<a>`); a.append(str); let unqstr = `a${Math.random()}`; a.attr('href', `javascript:_useClickable('${unqstr}')`); clickableFunctions[unqstr] = cb; $('#response').append(a); } function post(url, data, cb, dontadd) { console.log(url, _at); $.ajax({ url: dontadd ? url : url + '?_at=' + _at, type: 'POST', data: data, success: function (result) { cb(result); }, error: function (err) { console.log('err', err); alert('Failed!'); addLog('============' + url + '连接失败!==============='); } }); } function get(url, data, cb) { if (!data) data = {}; data._at = _at; $.ajax({ url: url, type: 'GET', data: data, success: function (result) { cb(result); }, error: function (err) { console.log('err', err); // alert('Failed!'); // addLog('============' + url + '连接失败!==============='); cb(err); } }); } cancelOrder.on('click', function () { $.ajax({ url: baseUrl + `order/cancel?_at=${_at}`, type: 'POST', data: { mchid: mchid, "orderId": orderId, }, success: function (result) { addLog('退款退单返回信息:' + JSON.stringify(result)); }, error: function (err) { alert('cancelOrder Failed!'); } }); }); cashPay.on('click', function () { $.ajax({ url: baseUrl + 'pay/offline', type: 'POST', data: { "receiver": cashAccount, "amount": 1, "method": "CASH", "paymentId": paymentId, "mchid": mchid }, success: function (result) { let data = result.data; addLog('付现金post返回信息:' + data.status); }, error: function (err) { alert('payWithCash Failed!'); } }); }); freePay.on('click', function () { $.ajax({ url: baseUrl + 'pay/offline', type: 'POST', data: { "receiver": cashAccount, "amount": 1, "method": "DA", "paymentId": paymentId, "mchid": mchid }, success: function (result) { let data = result.data; addLog('付免费post返回信息:' + data.status); }, error: function (err) { alert('payWithCash Failed!'); } }); }); memberPay.on('click', function () { //1 获取会员account Id, //2 获取商户MC id let memberId = $('#member_id').val(); let payAmount = 1; step0(); function step0() { get(baseMemberUrl + 'member', {mid: memberId, mchid: mchid, account: 'true'}, step1); } function step1(member) { let account = member.data.account; addLog('会员支付第一步:查询会员,结果为:' + JSON.stringify(member)); addLog('会员余额:' + account.amount); addLog('会员透支额度:' + account.overdraft); addLog('============================================'); if (account.amount - payAmount < account.overdraft) { addLog('失败,会员余额不足'); return; } if (member.code == 0) { step2(member.data.accountId); } } function step2(memberAccountId) { get(merchantUrl + 'account/find', { mchid: mchid, query: JSON.stringify({"where": {"shortCut": "MC"}}) }, function (result) { addLog('会员支付第二步:查询商户会员帐号,结果为:' + JSON.stringify(result)); addLog('============================================'); if (result.code == 0) { step3(memberAccountId, result.data[0].accountId); } }); } function step3(memberAccountId, merchantAccountId) { post(baseUrl + 'pay/transfer', { amount: payAmount, paymentId: paymentId, receiver: merchantAccountId, payer: memberAccountId }, function (result) { addLog('会员支付第三步:具体支付,结果为:' + JSON.stringify(result)); addLog('============================================'); if (result.code == 0) { addLog('============================================'); } }) } }); aliNativePay.on('click', function () { $.ajax({ url: baseUrl + 'pay/alinative', type: 'POST', data: { "receiver": cashAccount, "amount": 1, "paymentId": paymentId, "mchid": mchid }, success: function (result) { let data = result.data; nativeurl.empty(); nativeurl.qrcode({text: data}); }, error: function (err) { alert('aliNativePay Failed!'); } }); }); wxNativePay.on('click', function () { $.ajax({ url: baseUrl + 'pay/wxnative', type: 'POST', data: { "receiver": cashAccount, "amount": 1, "paymentId": paymentId, "mchid": mchid }, success: function (result) { let data = result.data; nativeurl.empty(); nativeurl.qrcode({text: data}); }, error: function (err) { alert('wxNativePay Failed!'); } }); }); authcodePay.on('click', function () { let input = authCodeInput.val(); if (input.length != 18) { authCodeInput.val('长度必须为18'); return; } $.ajax({ url: baseUrl + 'pay/scan', type: 'POST', data: { "receiver": wxAccount, "amount": 1, "authCode": input, "paymentId": paymentId, "mchid": mchid }, success: function (result) { let data = result.data; if (data) addLog('付扫码post返回信息:' + data.status); else addLog('付扫码post返回信息:' + JSON.stringify(result)); }, error: function (err) { alert('authcodePay Failed!'); } }); }); function addLog(str, skipbr) { if (skipbr) { document.getElementById('response').innerHTML += str; } else { document.getElementById('response').innerHTML += str + '<br>'; } } function memberOrder(cb) { let topupAmount = 2; get(baseMemberUrl + 'id', {}, function (result) { addLog('第一步:获取空闲会员id:' + result.data); addLog('============================================'); let memberId = result.data; $('#member_operation_area').show(); registerMemberFunc = function () { post(baseMemberUrl + 'register', {mid: memberId, mchid: mchid}, function (result) { addLog('会员已注册:' + JSON.stringify(result)); addLog('============================================'); }); }; bindICCard = function () { post(baseMemberUrl + 'bindCard', { mid: memberId, cardId: $('#iccard_input').val(), // password:$('#iccard_pw_input').val(), //注释此行以输入密码 mchid: mchid }, function (result) { addLog('绑定结果:' + JSON.stringify(result)); if (result.code == 21) { addLog('post需要加上 confirm : 1'); } if (result.code == 18) { addLog('post需要加上 password : 密码'); } if (result.code == 8) { addLog('要先注册或者充值一次'); } addLog('============================================'); }) }; topupMemberFunc = function () { post(baseMemberUrl + 'makeTopUp', { mid: memberId, amount: topupAmount, mchid: mchid }, function (result) { addLog('第二步:充值订单信息:' + JSON.stringify(result)); addLog('============================================'); addLog('第三步:生成订单待支付:'); addLog('============================================'); let orderData = result.data.order; let params = orderData.params; params.subOrderId = '1'; cb({ "orders": [ { "type": "memberTopUp", "notifyUrl": orderData.notifyUrl, "amount": topupAmount, "rollBackUrl": orderData.rollbackUrl, "extraData": params, "status": "PENDING", } ] }) }); }; memberPrototypeFunc = function () { get(baseMemberUrl + 'member', { mid: memberId, mchid: mchid, prototype: true, records: true }, function (r) { addLog('结果:' + JSON.stringify(r)); if (r.code) addLog('============================================'); }) } }); // } let GymId = $('#gym_input').val(); let date = '2017-09-13'; function gymOrder(cb) { let price = 3; let timeStamp = new Date(new Date().setHours(0, 0, 0, 0)).getTime(); //开始时间结束时间按秒计算,0~86400 let today = new Date().getTime(); let startTime = parseInt((today - timeStamp) / 1000); let endTime = startTime + 600; get(baseGymUrl + GymId, {}, function (result) { addLog('第一步:获取场馆信息:' + JSON.stringify(result)); addLog('============================================'); //获取第一个场地 let fieldsData = result.data.fields; let firstField = fieldsData[0]; let secondField = fieldsData[2]; console.log(firstField); // let validSports1 = firstField.sport; // let validSports2 = secondField.sport; get(baseGymUrl + GymId + '/booking', { fields: firstField.fieldId, //定多场次用;分隔 date: date, start: startTime, end: endTime, sport: 'YUMAOQIU', price: price, remark: JSON.stringify({status: 'sell'}), }, step2); }); function step2(result) { addLog('第二步:获取occupyKey:' + JSON.stringify(result)); addLog('============================================'); let occupyKey = result.data.occupyKey; let cancelUrl = baseGymUrl + GymId + '/cancelBooking/' + occupyKey; $('#gym_operation_area').show(); cancelGymBookingOperation = function () { post(cancelUrl, {}, function (result) { console.log(result); addLog('场次已撤销,如果订单支付,应该会看到场次撤销信息') }); }; addLog('第三步:生成订单待支付:'); addLog('============================================'); cb({ "orders": [ { "type": "sport", "notifyUrl": baseGymUrl + GymId + '/booking/' + occupyKey, "amount": price, "rollBackUrl": cancelUrl, "extraData": { "subOrderId": "1", "occupyKey": occupyKey //供以后在后台查询用 }, "status": "PENDING", } ] }) } } function simpleOrder(cb) { cb({ "orders": [ { "type": "goods", "notifyUrl": 'http://merchant.api.bolopie.thinkraz.com/validate?mchid=101464&key=8cc9-7ad5-7d19-d903', //此为假接口,必定成功 "amount": 1, "rollBackUrl": 'http://merchant.api.bolopie.thinkraz.com/validate?mchid=101464&key=8cc9-7ad5-7d19-d903', //此为假接口,必定成功 "extraData": { "subOrderId": "1" }, "status": "PENDING", }, { "type": "goods", "notifyUrl": 'http://merchant.api.bolopie.thinkraz.com/validate?mchid=101464&key=8cc9-7ad5-7d19-d903', //此为假接口,必定成功 "amount": 2, "rollBackUrl": 'http://merchant.api.bolopie.thinkraz.com/validate?mchid=101464&key=8cc9-7ad5-7d19-d903', //此为假接口,必定成功 "extraData": { "subOrderId": "2" }, "status": "PENDING", }, // //此单必定失败,注意,订单成功后有可能返回退款金额 // { // "type": "goods", // "notifyUrl": 'dfghfghfdghdfghd', //此为假接口,必定失败 // "amount": 1, // "rollBackUrl": 'dfghfghfdghdfghd', //此为假接口,必定失败 // "extraData": { // "subOrderId": "1" // }, // "status": "PENDING", // } ] }); } function cardOrder(cb) { $('#card_operation_area').show(); $('#card_input').val(new Date().getTime()); getCardData = function () { get(cardUrl + 'get', {cardId: $('#card_input').val(), mchid: mchid}, function (result) { addLog('查询卡,结果为:' + JSON.stringify(result)); addLog('============================================'); }) }; disableCard = function () { post(cardUrl + 'disable', {cardId: $('#card_input').val(), mchid: mchid}, function (result) { addLog('废除卡,结果为:' + JSON.stringify(result)); addLog('============================================'); }) }; changeCard = function () { post(cardUrl + 'change', { oldCardId: $('#card_input').val(), mchid: mchid, newCardId: '123456' }, function (result) { addLog('修改卡,结果为:' + JSON.stringify(result)); addLog('============================================'); }) }; resetCardPassword = function () { post(cardUrl + 'resetPassword', { cardId: $('#card_input').val(), mchid: mchid, oldPassword: $('#pw_input').val(), newPassword: '1' }, function (result) { addLog('修改卡密码为1,结果为:' + JSON.stringify(result)); addLog('============================================'); }) }; registerCard = function () { addLog('第一步:注册卡,卡号为:' + JSON.stringify($('#card_input').val())); addLog('第一步:注册卡,密码为:' + JSON.stringify($('#pw_input').val())); addLog('============================================'); post(cardUrl + 'register', { "name": "测试名称", "phone": "测试电话", "cardId": $('#card_input').val(), "password": $('#pw_input').val(), "mchid": mchid }, function (result) { addLog('注册卡成功,返回为:' + JSON.stringify(result)); addLog('============================================'); addLog('第二步,生成订单:'); addLog('============================================'); cb({ "orders": [ { "type": "card", "notifyUrl": cardUrl + 'check', "amount": 1, "rollBackUrl": cardUrl + 'disable', //此为假接口,必定成功 "extraData": { "subOrderId": "1", "name": "测试名称", "phone": "测试电话", "cardId": $('#card_input').val(), "password": $('#pw_input').val(), "mchid": mchid }, "status": "PENDING", }, ] }); } ); } } function trainingOrder(cb) { // 1 : get lessions: get(trainingUrl + `/${mchid}/lesson`, {}, function (result) { addLog('第一步:获取课程:' + JSON.stringify(result.data)); addLog('============================================'); $('#training_operation_area').show(); for (let i = 0; i < result.data.lessons.length; i++) { let lesson = result.data.lessons[i]; addClickable(`购买新课->`, function () { let iccardNo = $(`#iccard_input_t`).val(); let iccardpw = $(`#iccard_pw_input_t`).val(); let birthYear = $(`#birthyear_t`).val(); let lesson = result.data.lessons[i]; post(trainingUrl + 'trainee/register', { lessonId: lesson.id, birthYear: birthYear, // price: lesson.totalPrice, price: 2, cardNo: iccardNo, password: iccardpw }, function (result) { step2(result); }); }); addLog(` 课程名称:${lesson.name},新课次数:${lesson.count},单价:${lesson.singlePrice}`); } }); function step2(result) { addLog('第2步:获取学员信息:' + JSON.stringify(result.data)); addLog('============================================'); cb({ "orders": [ { "type": "newTrainingClass", "notifyUrl": `${trainingUrl}trainee/internalFetch`, "amount": result.data.lesson.totalPrice, "rollBackUrl": `${trainingUrl}trainee/refundLesson/${result.data.id}`, "extraData": { subOrderId: '1', mchid: mchid, traineeId: result.data.id }, "status": "PENDING", } ] }); } } function timescardOrder(cb) { let topupAmount = 5; let topupTimes = 2; get(baseMemberUrl + 'id', {}, function (result) { addLog('第一步:获取空闲次卡id:' + result.data); addLog('============== =============================='); let memberId = result.data; $('#member_operation_area').show(); registerMemberFunc = function () { post(baseTimescardUrl + 'register', {tid: memberId, mchid: mchid,prototype:'334088641506665350433'}, function (result) { addLog('会员已注册:' + JSON.stringify(result)); addLog('============================================'); }); }; bindICCard = function () { post(baseTimescardUrl + 'bindCard', { mid: memberId, cardId: $('#iccard_input').val(), mchid: mchid }, function (result) { addLog('绑定结果:' + JSON.stringify(result)); if (result.code == 21) { addLog('post需要加上 confirm : 1'); } if (result.code == 18) { addLog('post需要加上 password : 密码'); } if (result.code == 8) { addLog('要先注册或者充值一次'); } addLog('============================================'); }) }; topupMemberFunc = function () { post(baseTimescardUrl + 'makeTopUp', { tid: memberId, amount: topupAmount, times: topupTimes, mchid: mchid }, function (result) { addLog('第二步:充值订单信息:' + JSON.stringify(result)); addLog('============================================'); addLog('第三步:生成订单待支付:'); addLog('============================================'); let orderData = result.data.order; let params = orderData.params; params.subOrderId = '1'; cb({ "orders": [ { "type": "timescardTopUp", "notifyUrl": orderData.notifyUrl, "amount": topupAmount, "rollBackUrl": orderData.rollbackUrl, "extraData": params, "status": "PENDING", } ] }) }); }; memberPrototypeFunc = function () { get(baseTimescardUrl + 'prototype',) } }); } function retailOrder(cb) { let id; let amount; let price; let strid; let goods; $('#retail_operation_area').show(); buyGoodsFunc = function () { id = $('#goods_id_input').val(); amount = $('#goods_amount_input').val(); price = $('#goods_price_input').val(); strid = $('#goods_strid_input').val(); goods = { [id]: {amount: amount, price: price}, }; post(baseGoodsUrl + 'goods/sell' + `?mchid=${mchid}&strid=${strid}&_at=${_at}`, goods, step1, true) }; function step1(result) { addLog('第一步:出售商品(减少库存)' + JSON.stringify(result)); addLog('============================================'); let data = result.data; for (let key in goods) { let item = goods[key]; item.token = data.token; } goods.subOrderId = '1'; goods.token = data.token; console.log(goods); cb({ "orders": [ { "type": "goods", "notifyUrl": baseGoodsUrl + 'goods/orderIntegrityCheck', "amount": amount * price, "rollBackUrl": baseGoodsUrl + 'goods/return' + `?mchid=${mchid}&strid=${strid}&executor=SDKtester&_at=${_at}`, //此为假接口,必定成功 "extraData": goods, "status": "PENDING", }, ] }, step2); refundSub = function () { let refundUrl = baseGoodsUrl + 'goods/return' + `?mchid=${mchid}&strid=${strid}&executor=SDKtester&_at=${_at}`; let token = data.token; post(refundUrl, { [id]: {amount: 1, token: token} }, step2); } } function step2(result) { addLog('已完成' + JSON.stringify(result)); addLog('============================================'); } } function startOrder(type) { $('#start_area').empty(); switch (type) { case 'simple': simpleOrder(makeOrder); break; case 'member': memberOrder(makeOrder); break; case 'gym': gymOrder(makeOrder); break; case 'card': cardOrder(makeOrder); break; case 'retail': retailOrder(makeOrder); break; case 'timescard': timescardOrder(makeOrder); break; case 'training': trainingOrder(makeOrder); break; default: return; } function makeOrder(obj, callback) { $('#button_area').show(); $.ajax({ url: baseUrl + `order/make?mchid=${mchid}&_at=${_at}`, type: 'POST', data: obj, qs: { _at: _at, mchid: mchid }, success: function (result) { let data = result.data; let order = data.payment; let channel = data.channel; addLog('生成订单成功,服务器返回:' + JSON.stringify(data)); addLog('============================================================================='); addLog('payment is :' + order.id); addLog('order is :' + order.orderId); addLog('channel id is :' + channel.channel); addLog('channel key is :' + channel.key); addLog(''); addLog('now listening :' + channel.channel); paymentId = order.id; orderId = order.orderId; if (callback) { callback(result); } trSocket({ appid: 'APPIDOrq8Rf083a9b5a0f877c8WSIyEf', channel: channel.channel }, { message: function (data) { console.log(data); addLog('即时接口收到信息: ' + data.message.code + ' ' + data.message.message + ' ' + JSON.stringify(data.message.data)); } }); }, error: function (err) { console.log('err', err); alert('Failed!'); addLog('============连接失败!==============='); addLog('请查看浏览器参数是否为:'); addLog('"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe" --disable-web-security --user-data-dir'); } }); } } function fuck() { let date = '2017-09-02'; get(baseGymUrl + GymId, {}, function (result) { addLog('第一步:获取场馆信息:' + JSON.stringify(result)); addLog('============================================'); //获取第一个场地 let fieldsData = result.data.fields; let firstField = fieldsData[0]; let secondField = fieldsData[1]; let counts = 0; let total = 0; let errorTotal = 0; next(1); function next(i) { let startTime = i; let endTime = i + 1; counts++; if (counts > 200) { counts = 0; total += 200; document.getElementById('response').innerHTML = ""; addLog('total:' + total); } get(baseGymUrl + GymId + '/booking', { fields: firstField.fieldId + ';' + secondField.fieldId, //定多场次用;分隔 date: date, start: startTime, end: endTime, sport: 'PINGPANGQIU', price: 1 }, function (result) { if (!result.data) { addLog('fuck:' + i + ' failed'); i += 100; document.getElementById('extra_console').innerHTML += i + ' ' + JSON.stringify(result) + '<br>'; errorTotal++; if (errorTotal > 50) { errorTotal = 0; document.getElementById('extra_console').innerHTML = ''; } } else addLog('fuck:' + i + ' ' + result.data.occupyKey); next(i + 1); }); } }); } function fuck2() { for (let i = 0; i < 50; i++) { get('http://localhost:8083/fuck', {}, function (result) { addLog('' + JSON.stringify(result)); }); } } </script> </body> </html>