本帖最后由 rockage 于 2017-7-6 03:51 编辑
搞了好几天,今天总算是弄成了!这过程中还恶补了许多JQuery和JSon的知识,
因为现在的快递公司慢慢都开始放弃手动填单了,都是微信下单然后自动获取单号,韵达快递给每一个业务员发了一个二维码,所有由这个二维码产生的件都绑定在该业务员名下,说白了二维码就是一个网址,这很容易理解,我最初的想法是只需要解析出这个网址然后拼装伪造一个提交链接,这样就可以实现自动完成下单而不需要手动从微信下单。
可理想是丰满的现实是骨感的,事实上哪有那么简单,首先碰到的麻烦事是没有测试环境,因为韵达这个网址完全是为手机浏览器定制的,电脑根本无法运行。(IE:一片灰,什么都不能点 、 Chrome:比IE强,能点击,但无法选择省份)
似乎走进死胡同。
然后找PC上的手机浏览器的模拟器,共有5种方法,未果。
【小窍门:最后各种模拟器都试了个遍,甚至动用了真正的安卓模拟器,都是打不开省份选择界面,最终发现直接使用Chrome版本 59.0.3071.115(正式版本) (32 位)即可,不用做任何改动,完美运行】
然后Chrome的调试环境非常好(按F12),JS的各种断点、单步执行、变量观察等等都很方便。
剩下就比较简单了,韵达这个东西使用的是开源的JQuery库,最终由一个JQuery (即以$开头的代码都是在引用JQuery) 的ajax模块发起提交。
我设了一个断点,发现这个变量奇长无比,里面包含了"业务员ID","收发件人信息"和一大堆看不懂的他们韵达内部的业务逻辑。
我只改变了我看得懂那部分,即收发件人信息,其他原封不动的由我自己搭建的一个AJax发送器发出,
结果,成功了!
知识点:
1. JQuery是一个库,jquery.com 这个网站可以下到最新版。
2. JSon是一种数据交换方式。
3. Ajax是一种异步提交数据到服务器的方式,简单地说就是不刷新页面改变页面数据。JQuery可以比较简单地实现它,否则纯粹手动用JS去搭建还是有一定难度的。
4. 耗费我时间最大的一个地方:
在JQuery实现Ajax的时候,有一个选项:
dataType:'json',
这是指定从 服务器-> 客户端 的返回值,而不是客户端 -> 服务器 的提交值(很多文章都弄错了),
如果从服务器返回来的值不是严格按照 {"变量1":“值1”,"变量2":“值2”} 这种格式的话,即报错。
而从客户端提交到服务器的值,我感觉是自动判断的,无论是用JSON还是用传统的字符串拼装形式,甚至根本不指定dataType,都一样,服务器那边都能正常解析。
5. 最后,Chrome绝对是个好东东,感谢Google !
搞了好几天,今天总算是弄成了!这过程中还恶补了许多JQuery和JSon的知识,
因为现在的快递公司慢慢都开始放弃手动填单了,都是微信下单然后自动获取单号,韵达快递给每一个业务员发了一个二维码,所有由这个二维码产生的件都绑定在该业务员名下,说白了二维码就是一个网址,这很容易理解,我最初的想法是只需要解析出这个网址然后拼装伪造一个提交链接,这样就可以实现自动完成下单而不需要手动从微信下单。
可理想是丰满的现实是骨感的,事实上哪有那么简单,首先碰到的麻烦事是没有测试环境,因为韵达这个网址完全是为手机浏览器定制的,电脑根本无法运行。(IE:一片灰,什么都不能点 、 Chrome:比IE强,能点击,但无法选择省份)
似乎走进死胡同。
然后找PC上的手机浏览器的模拟器,共有5种方法,未果。
【小窍门:最后各种模拟器都试了个遍,甚至动用了真正的安卓模拟器,都是打不开省份选择界面,最终发现直接使用Chrome版本 59.0.3071.115(正式版本) (32 位)即可,不用做任何改动,完美运行】
然后Chrome的调试环境非常好(按F12),JS的各种断点、单步执行、变量观察等等都很方便。
剩下就比较简单了,韵达这个东西使用的是开源的JQuery库,最终由一个JQuery (即以$开头的代码都是在引用JQuery) 的ajax模块发起提交。
我设了一个断点,发现这个变量奇长无比,里面包含了"业务员ID","收发件人信息"和一大堆看不懂的他们韵达内部的业务逻辑。
我只改变了我看得懂那部分,即收发件人信息,其他原封不动的由我自己搭建的一个AJax发送器发出,
结果,成功了!
<font size="4"><!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Rockage</title>
<script src="jquery-3.2.1.js">
</script>
<script>
$(document).ready(function(){
$("button").click(function(){
var data = "action=member.order.place_order&version=V1.0&req_time=1499276815403&openid=011KA5G62jMMYL0RBDF62xw8G62KA5G6&appid=ydwechat&data={\"deliveryStartTime\":\"08:00\",\"deliveryEndTime\":\"17:00\",\"weight\":\"1\",\"freight\":\"10.00\",\"premium\":\"20.0\",\"otherCharges\":\"1.0\",\"collectionValue\":\"0\",\"remark\":\"\",\"createTm\":\"2017-07-06\",\"isCollect\":\"N\",\"isInsured\":\"N\",\"contact\":{\"senderName\":\"杨宇全\",\"senderCompany\":\"\",\"senderProvince\":\"广东省\",\"senderCity\":\"深圳市\",\"senderArea\":\"福田区\",\"senderAddress\":\"中康北路73号中康创业园715\",\"senderMobile\":\"13509612034\",\"receiverName\":\"罗红英\",\"receiverCompany\":\"\",\"receiverProvince\":\"广东省\",\"receiverCity\":\"深圳市\",\"receiverArea\":\"福田区\",\"receiverAddress\":\"华强北上步工业区404栋511\",\"receiverMobile\":\"13924675278\"},\"special\":\"6\",\"session_timestamp\":\"1499276436668\",\"validCode\":\"\",\"extendBm\":\"5025518291\",\"type\":\"2\",\"items\":[{\"name\":\"文件票件\",\"number\":\"1\"}]}";
alert(data);
$.ajax({
url: "http://op.yundasys.com/opserver/interface.do?member.order.place_order&ydwechat",
type: "POST",
data: data,
success: function(data,status){
alert("发送成功!");
},
error: function(){
alert("NO!");
}
});
});
});
</script>
</head>
<body>
<button>发送一个韵达快递请求</button>
</body>
</html></font>知识点:
1. JQuery是一个库,jquery.com 这个网站可以下到最新版。
2. JSon是一种数据交换方式。
3. Ajax是一种异步提交数据到服务器的方式,简单地说就是不刷新页面改变页面数据。JQuery可以比较简单地实现它,否则纯粹手动用JS去搭建还是有一定难度的。
4. 耗费我时间最大的一个地方:
在JQuery实现Ajax的时候,有一个选项:
dataType:'json',
这是指定从 服务器-> 客户端 的返回值,而不是客户端 -> 服务器 的提交值(很多文章都弄错了),
如果从服务器返回来的值不是严格按照 {"变量1":“值1”,"变量2":“值2”} 这种格式的话,即报错。
而从客户端提交到服务器的值,我感觉是自动判断的,无论是用JSON还是用传统的字符串拼装形式,甚至根本不指定dataType,都一样,服务器那边都能正常解析。
5. 最后,Chrome绝对是个好东东,感谢Google !