中国石凳联盟 登录注册

【原创】韵达快递自动下单(破解型)

rockage··0 回复·299 浏览

发表回复
本帖最后由 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发送器发出,


结果,成功了!




<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 !






















点赞0 收藏
发表回复
发表回复