查询和追踪快递单的流向有这么难吗?用VFP其实太简单

作者:浙江小雨

社群有狐友提问:如何在vfp中跟踪我在安能物流发出货物的实时状态数据?


查询和追踪快递单的流向有这么难吗?No,用猫框分分种搞定!

我们找来了快递鸟物流查询接口http://www.kdniao.com/。

第一步:注册新用户。

填入手机号,获取验证码,注册。

第二步,实名认证。

填写自己企业的名称,地址,联系电话,证照上传。

第三步,购买快递物流查询服务。

这里,我们选择免费的就可以了。有四家快递公司的单子是可以免费查询的。

第四步,取得调用的帐号和KEY。

第五步,按接口文档,对接数据传递。

从网站上下载接口文档。

看到以下说明:

  1. 我们可以看到这个一个http接口,使用POST传参的。网址如下:
    lcUrl=[ https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx]
  2. 请求的编码格式为:
    “application/x-www-form-urlencoded;charset=utf-8”
    这个就是我们POST请求前设置的请求头。
  3. 请求全部内容,有一定格式并进行密文的签名。
    (1)内容为一串JSON字符串 {‘OrderCode’:‘’,‘ShipperCode’:‘SF’,‘LogisticCode’:‘118954907573’}

(2)密文签名的规则为:

把(jsonStr+APIKey)进行MD5加密, 然后Base64编码, 最后 进行URL(utf-8)编码
(3)最后发送的字符串为:

string PostStr = “RequestType=1002&EBusinessID= used &RequestData=jsonStr
&DataSign= datasign&DataType=DataType”

第六步,用猫框来写我们的VFP代码,进行对接。

有了上面的分析,我们可以直接写代码了。

  1. 先把需要的固定的参数定义一下。
    lcid=[1774] &&填写用户ID
    lcAPIkey=[e26ac096-
    ---31619b53322d] &&填入API KEY

lcurl = https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx &&调用的网址。

lcDataType = “2” &&返回的数据类型
lccharset = “UTF-8” &&charset的格式

**请求内容的字符串 ,一个圆通快递的单子,圆通简称代码:YTO ,快递单号: YTO118461988807

TEXT TO jsonStr NOSHOW TEXTMERGE PRETEXT 15
{“OrderCode”:“”,“ShipperCode”:“YTO”,“LogisticCode”:“YTO118461988807”}
ENDTEXT

  1. 计算出加密的签名。
    我们知道签名格式为:
    把(jsonStr+APIKey)进行MD5加密, 然后Base64编码, 最后 进行URL(utf-8)编码
    lcdata=jsonStr+lcAPIkey &&这里注意,如果含有中文,需要进utf-8转码。
    lcmd5data=md5string(lcdata) &&MD5加密
    lcmd5data=LOWER(lcmd5data) &&特别注意,这里MD5需要小写。
    lcbasedata=STRCONV(lcmd5data,13) &&base64编码
    lcURLdata=URLEncode(lcbasedata) &&进行URL编码。
    lcdatasign=lcURLdata &&最终形成签名。

我们这里一步一步,把加密过程都分解出来了。这样对初学者更容易看得懂一些。

  1. 请求内容的字符串,进行URL编码
    lcURLjsonSTR=URLEncode(jsonStr)

  2. 组织我们最终的发送字符串。
    格式如下:RequestType=1002&EBusinessID= used &RequestData=jsonStr
    &DataSign= datasign&DataType=DataType

TEXT TO lcPostStr NOSHOW TEXTMERGE PRETEXT 15
RequestType=1002&EBusinessID=<>&RequestData=<>&DataSign=<>&DataType=<>
ENDTEXT

  1. 最后就是发送了。

*建一个发送浏览器。
WebClient=Newobject(“Qiyu_HttpClient”,“Qiyu_HttpClient.prg”)
*设置POST发送
WebClient.method=“post”

*设置二个请求头。
WebClient.setHeader(“Content-type”,“application/x-www-form-urlencoded”)
WebClient.setHeader(“charset”,“utf-8”)
*发送
cData=WebClient.send(lcUrl,lcPostStr)

看一下,返回的结果。
If !Isnull(cData)
Messagebox(cData)
Else
Messagebox(WebClient.msg)
Endif

我传的单号是随意取的,他返回一个“暂无轨迹信息”,那就是成功了。

附:完整VFP源码


lcid=[17****74]				&&填写用户ID
lcAPIkey=[e26ac096-****-****-****-31619b53322d]		&&填入API KEY

lcurl ="https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx"   &&调用的网址。

lcDataType = "2"				&&返回的数据类型
lccharset = "UTF-8"				&&charset的格式

**请求内容的字符串 ,一个圆通快递的单子,圆通简称代码:YTO ,快递单号: YTO118461988807
TEXT TO jsonStr NOSHOW TEXTMERGE PRETEXT 15
{"OrderCode":"","ShipperCode":"YTO","LogisticCode":"YTO118461988807"}
ENDTEXT 

*把(jsonStr+APIKey)进行MD5加密, 然后Base64编码, 最后 进行URL(utf-8)编码

lcdata=jsonStr+lcAPIkey		&&这里注意,如果含有中文,需要进utf-8转码。
lcmd5data=md5string(lcdata)		&&MD5加密
lcmd5data=LOWER(lcmd5data)			&&特别注意,这里MD5需要小写。
lcbasedata=STRCONV(lcmd5data,13)	&&base64编码
lcURLdata=URLEncode(lcbasedata)	&&进行URL编码。
lcdatasign=lcURLdata				&&最终形成签名。

*jsonStr  进行URL(utf-8)编码
lcURLjsonSTR=URLEncode(jsonStr)


*最终的发送字符串
TEXT TO lcPostStr NOSHOW TEXTMERGE PRETEXT 15
RequestType=1002&EBusinessID=<<lcid>>&RequestData=<<lcURLjsonSTR>>&DataSign=<<lcdatasign>>&DataType=<<lcDataType>>
ENDTEXT 

*建一个发送浏览器。
WebClient=Newobject("Qiyu_HttpClient","Qiyu_HttpClient.prg")
*设置POST发送
WebClient.method="post"

*设置二个请求头。
WebClient.setHeader("Content-type","application/x-www-form-urlencoded")
WebClient.setHeader("charset","utf-8")
*发送
cData=WebClient.send(lcUrl,lcPostStr)


If !Isnull(cData)
	Messagebox(cData)
Else
	Messagebox(WebClient.msg)
Endif

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加菲猫的VFP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值