前面完成建立订单的api後
我们今天要把查询订单做完
扣除今天剩下2天的时间
今天在把查询做完後
我希望可以把laravel串完
我们要做的交换功能还没完成呢!
希望可以剩下几天把它完成
新功能技能交换:
付款金额情境如下
我们在前几天完成了技能评分後0~5代表该会员技能等级
我们会把其他使用者对该使用者的评分做总和 假如 有2位评分roni 微积分为例,分别是3,1分。那roni微积分的等级就是(3+1)/2 = 2分
有了该技能等级後,我们可以跟其他使用者交换相同等级的技能!
假如有一位使用者叫做Kevin他会coding 技能点数总评分後等级为3分!!
这时後roni因为不足kevin等级1分
我们就会向roni索取
等级差乘上1000的费用作为给Kevin的教学费用!
那我们订单范例 就会开一个新订单 对roni计算
Roni与Kevin等级差(1) * 1000(补偿费) = API收取金费总额(1000*1)
也算是技能在交换中补足高分者的小补偿吧!
在我的creadeOrder APi中修正一些地方
app.post("/createOrder", async function (req, res) {
// auto pay string
const { OrderNo, Amount } = { ...req.body };
let ddmsg = {
ShopNo: "NA0249_001",
OrderNo,
Amount: Amount * 1,
CurrencyID: "TWD",
PayType: "C",
PrdtName: "pp",
ReturnURL: "http://10.11.22.113:8803/QPay.ApiClient-Sandbox/Store/Return",
BackendURL:
"https://sandbox.sinopac.com/funBIZ.ApiClient/AutoPush/PushSuccess",
};
let msg = {
ShopNo: "NA0249_001",
OrderNo,
Amount: Amount * 1,
CurrencyID: "TWD",
PayType: "C",
PrdtName: "pp",
CardParam: { AutoBilling: "Y" },
ReturnURL: "http://10.11.22.113:8803/QPay.ApiClient-Sandbox/Store/Return",
BackendURL:
"https://sandbox.sinopac.com/funBIZ.ApiClient/AutoPush/PushSuccess",
};
const Version = "1.0.0";
const ShopNo = "NA0249_001";
const APIService = "OrderCreate";
const Nonce = await callnonce();
const signData = getsign(Nonce, ddmsg);
const Message = decmessage(Nonce, JSON.stringify(msg));
// console.log(Nonce);
// console.log(signData);
// console.log(Message);
return axios
.post("https://apisbx.sinopac.com/funBIZ/QPay.WebAPI/api/Order", {
Version,
ShopNo,
APIService,
Sign: signData,
Nonce,
Message,
})
.then(({ data }) => {
return res.send(data);
})
.catch((data) => {
return res.send(data);
});
});
我多了ddmsg跟msg
昨天建立订单很开心
但是发现解密後签章错误
原因是我没有把签章规则看清楚
在制作sign字的字串空物件跟有多余物件的字串都不采用
上面就有三个参数不采用
"ATMParam": { "ExpireDate": "20180502" },
"CardParam": { },
"ConvStoreParam": { },
但是在送加密後的message又需要他
那麽我这边改过的程序是先以物件做预设
把前端需要的参数(钱啊,编号)挖空格给req.body填写
剩下的就塞固定值
然後再加密密文中使用的msg在以JSON.stringify处理
原因是我们要把物件变成json字串的形式在做hash才会正确喔!!!
前面有做错的的地方跟你们抱歉
如果成功後解密应该会看到付款url
跟成功讯息
基本上有拿到下面的付款url就是有成功瞜!
这个是我的订单查询api
我把一些参数设定好分别是ddmsg跟msg
ddmsg是我做签章(sign)用的 因为我在前面签章函式忘了要先用物件形式把多余的字串filter掉
pp.post("/OrderQuery", async function (req, res) {
// auto pay string
const { OrderNo, Amount } = { ...req.body };
let ddmsg = {
ShopNo: "NA0249_001",
OrderNo: "A2020010100000000",
};
let msg = {
ShopNo: "NA0249_001",
OrderNo: "A2020010100000000",
};
const Version = "1.0.0";
const ShopNo = "NA0249_001";
const APIService = "OrderQuery";
const Nonce = await callnonce();
const signData = getsign(Nonce, ddmsg);
const Message = decmessage(Nonce, JSON.stringify(msg));
// console.log(Nonce);
// console.log(signData);
// console.log(Message);
return axios
.post("https://apisbx.sinopac.com/funBIZ/QPay.WebAPI/api/Order", {
Version,
ShopNo,
APIService,
Sign: signData,
Nonce,
Message,
})
.then(({ data }) => {
return res.send(data);
})
.catch((data) => {
return res.send(data);
});
});
接者我们来测试查询吧
第一次我没有设定筛选条件结果
想说我的订单怎这麽大包回传讯息
结果丢到解密API中发现
这是什麽原因呢!?
傻眼猫猫
查了很久後发现
express 有request的限制
其他小夥伴可以看自己使用的程序框架有没有限制
如果跟我一样用express的
可以在上面加上
app.use(express.json({ limit: "100mb" }));
也就是我们前面的解析body的middleware增加限制参数
我把它改高一点就可以喽
那解析完结果发现
因为没有多给条件
我们把其他前辈的交易纪录忆起抓来了
难怪这麽大包!!
後来我们改个条件也就是多订单编号的参数後
我们就拿到属於自己这笔的订单交易纪录拉!
好啦!
前面发现前面零碎参数制作都没有问题
结果整套执行下来才发现问题一大堆~
不过到这边後我也对金流的付款机制有了一定程度的了解
感谢永丰爸爸 跟 IT邦的机会
我才有这个动力去练习~
接下来几天我们把它做完吧!!
有兴趣参考我程序码的可以到我
github上看喔
IT铁人2021使用nodejs打造api串接
Shioaji X Backtesting -双均线策略 好啦!经过这麽多堂课,相信大家对Backt...
最後一天了,不免俗的来心得分享一下。 第一次写教学文,没做任何准备就提枪上阵来参加铁人。 老实说每天...
汇总函数是以多笔资料列为基础,输入的资料列经过函数运算後,一组只会输出一个值,基本特性如下: 可将一...
记录学习内容。 以下内容大多引用大大们的文章,加上一些自己的笔记。 自己的笔记部分,内容可能有错误。...
Maltego在Kali里是一套收集资讯用的工具,可以去收集网域的一些公开资讯,也可以去收集像是电子...