//#region import
|
import BaseApiService from "../baseApiService";
|
import { ResultInfo } from "../../public/commonInterface";
|
import * as crypto from "crypto";
|
import moment = require("moment");
|
|
//#endregion
|
|
/**
|
* 宏远接口帮助类
|
*/
|
export default class hongyuanHelperService extends BaseApiService {
|
//#region 推送订单
|
public async pushOrder(hYOrderInfo): Promise<ResultInfo> {
|
let info: ResultInfo = {
|
result: false,
|
msg: undefined
|
};
|
let { ctx } = this;
|
try {
|
const url = "http://www.pekkj.com/waybillrest/obtainWaybillNo.htm";
|
const oid_traderno = "20190415155054514";
|
const ordernoOid = hYOrderInfo.ordernoOid;
|
const key = "adtykd20190415";
|
var md5 = crypto.createHash("md5");
|
const sign = md5.update("oid_traderno=" + oid_traderno + "&ordernoOid=" + ordernoOid + "&" + key + "").digest("hex");
|
const timestamp = moment(new Date()).format("yyyyMMddhhmmss")
|
info.result = false;
|
var cargo = [];
|
for (let item of hYOrderInfo.cargo) {
|
var jsonCargo = {
|
name: item.name,
|
count: item.count,
|
weight: item.weight,
|
amount: item.amount
|
}
|
cargo.push(jsonCargo);
|
}
|
var jsonString = {
|
timestamp: timestamp,
|
sign: sign,
|
sign_type: "MD5",
|
version: "V1.0",
|
data: {
|
logisticProviderID: hYOrderInfo.logisticProviderID,
|
ordernoOid: hYOrderInfo.ordernoOid,
|
oid_traderno: oid_traderno,
|
shipper: hYOrderInfo.shipper,
|
shippercity: hYOrderInfo.shippercity,
|
shippercountry: hYOrderInfo.shippercountry,
|
shipperaddress: hYOrderInfo.shipperaddress,
|
shippertelephone: hYOrderInfo.shippertelephone,
|
consignee: hYOrderInfo.consignee,
|
consigneeprovince: hYOrderInfo.consigneeprovince,
|
consigneecity: hYOrderInfo.consigneecity,
|
consigneedistrict: hYOrderInfo.consigneedistrict,
|
consigneedeliver: hYOrderInfo.consigneedeliver,
|
consigneecountry: hYOrderInfo.consigneecountry,
|
consigneestreet: hYOrderInfo.consigneestreet,
|
consigneetelephone: hYOrderInfo.consigneetelephone,
|
paymethod: hYOrderInfo.paymethod,
|
cargototalweight: hYOrderInfo.cargototalweight,
|
cargo: cargo
|
}
|
}
|
const resData = await this.ctx.curl(url, {
|
// 必须指定 method
|
method: "POST",
|
// 通过 contentType 告诉 HttpClient 以 JSON 格式发送
|
contentType: "json",
|
data: jsonString,
|
// 明确告诉 HttpClient 以 JSON 格式处理返回的响应 body
|
dataType: "json"
|
});
|
var dynData = resData.data;
|
if (dynData.retcode == "000000") {
|
|
info.msg = "订单[" + hYOrderInfo.ordernoOid + "]推送结果为成功。";
|
info.data = dynData;
|
info.result = true;
|
ctx.logger.info(info.msg);
|
|
}
|
else {
|
info.msg = "订单[" + hYOrderInfo.ordernoOid + "]推送失败:" + dynData.retmsg;
|
info.result = false;
|
ctx.logger.info(info.msg);
|
}
|
|
} catch (error) {
|
info.msg = error.message;
|
info.result = false;
|
ctx.logger.info(info.msg);
|
|
}
|
return info;
|
}
|
//#endregion
|
|
//#region 获取路由
|
public async getRoute(hYOrderInfo): Promise<ResultInfo> {
|
let info: ResultInfo = {
|
result: false,
|
msg: undefined
|
};
|
let { ctx } = this;
|
try {
|
let { ctx } = this;
|
var ordernoOid = hYOrderInfo.ordernoOid;
|
let enteCode = "20190415155054514";
|
let timestamp = moment(new Date()).format("YYYY-MM-DD HH:mm:ss");
|
var md5 = crypto.createHash("md5");
|
let sign = md5.update("enteCode=" + enteCode + "&mailNo=" + ordernoOid + "×tamp=" + timestamp).digest("hex");
|
info.result = false;
|
let url = "http://tms.ubonex.com/website/getPekkjTrace.do";
|
let json = {
|
version: "1.0",
|
enteCode: enteCode,
|
timestamp: timestamp,
|
sign: sign,
|
data: {
|
mailNo: ordernoOid,
|
queryType: "0"
|
},
|
timeout: [30000, 30000]
|
};
|
const result = await ctx.curl(url, {
|
// 必须指定 method
|
method: "POST",
|
// 通过 contentType 告诉 HttpClient 以 JSON 格式发送
|
contentType: "json",
|
data: json,
|
// 明确告诉 HttpClient 以 JSON 格式处理返回的响应 body
|
dataType: "json"
|
});
|
|
if (result.data.retCode == "000000") {
|
let isHave = result.data.retMsg.trackList.length > 0;
|
if (!isHave) {
|
info.msg = "订单[" + ordernoOid + "]未获取到路由信息。";
|
info.result = false;
|
} else {
|
info.msg = "订单[" + ordernoOid + "]获取路由成功。";
|
info.data = result.data.retMsg.trackList;
|
info.result = true;
|
}
|
} else {
|
info.msg = "订单[" + ordernoOid + "]获取路由失败:" + result.data.retMsg;
|
info.result = false;
|
}
|
return info;
|
} catch (error) {
|
info.msg = error.message;
|
info.result = false;
|
ctx.logger.info(info.msg);
|
|
}
|
|
return info;
|
}
|
//#endregion
|
}
|