Beispiel #1
0
    def test_seach_phone(self):
        body = {"mobile": "m6zea9UPXp1LKzYzd1YWow=="}
        sign = auth.sign('searchPczPriceList', self.uuid, json.dumps(body))
        url = 'http://api.m.jd.com/client.action?functionId=searchPczPriceList&clientVersion=5.3.0&build=36639&client=android&osVersion=4.4.2&screen=1920*1080&partner=waps007&uuid=%s&area=1_0_0_0&networkType=wifi&st=%s&sign=%s&sv=122' % (
            self.uuid, sign[1], sign[0])
        headers = {
            'Charset': 'UTF-8',
            'jdc-backup': self.cookie,
            'Connection': 'close',
            'Cookie': self.cookie,
            'User-Agent':
            'Dalvik/1.6.0 (Linux; U; Android 4.4.2; Nexus Build/KOT49H)',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
        }

        resp = requests.post(url,
                             data='body=' +
                             urllib.quote_plus(json.dumps(body)) + '&',
                             headers=headers)
        print resp.text

        resp = resp.json()
        data = filter(lambda sku: sku['facePrice'] == '100', resp['skuList'])
        print len(data)
        print str(float(data[0]['jdPrice']) / 100)
Beispiel #2
0
    def test_get_h5_cookie(self):
        uuid = '863175026618021-a8a6681e316b'
        body = {"action": "to", "to": 'https%3A%2F%2Ftrain.m.jd.com'}
        print body
        sign = auth.sign('genToken', uuid, json.dumps(body))
        url = 'http://api.m.jd.com/client.action?functionId=genToken&clientVersion=5.8.0&build=36639&client=android&d_brand=ZTE&d_model=SCH-I779&osVersion=4.4.2&screen=1280*720&partner=tencent&uuid=%s&area=1_2802_0_0&networkType=wifi&st=%s&sign=%s&sv=122' % (
            uuid, sign[1], sign[0])
        print url
        headers = {
            'Charset': 'UTF-8',
            'Connection': 'close',
            'Cookie': self.cookie,
            'User-Agent': 'Dalvik/1.6.0 (Linux; U; Android 4.4.2; Nexus Build/KOT49H)',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}

        req = requests.post(url, data='body=' + urllib.quote(json.dumps(body)) + '&', headers=headers)
        print req.text

        resp = req.json()
        # {"code":"0","tokenKey":"AAEAMKMEfWAYh1fRAvE0siwbJrEjuCmaht3Of-dkAaMMpGzemdi7WsCeMn3EaUdejhCZvQ0","url":"http://un.m.jd.com/cgi-bin/app/appjmp"}

        url = 'http://un.m.jd.com/cgi-bin/app/appjmp?tokenKey=' + resp[
            'tokenKey'] + '&to=https%3A%2F%2Ftrain.m.jd.com&lbs=%7B%22provinceId%22%3A%2218%22%2C%22districtName%22%3A%22%E5%B2%B3%E9%BA%93%E5%8C%BA%22%2C%22districtId%22%3A%2248936%22%2C%22cityId%22%3A%221482%22%2C%22cityName%22%3A%22%E9%95%BF%E6%B2%99%E5%B8%82%22%2C%22provinceName%22%3A%22%E6%B9%96%E5%8D%97%22%2C%22lng%22%3A%22112.883301%22%2C%22lat%22%3A%2228.207992%22%7D'
        session = requests.session()
        req = session.get(url, headers={
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
            'User-Agent': 'jdapp;android;5.4.1;4.4.2;863175026618021-a8a6681e316b;network/wifi;osp/android;apv/5.4.1;osv/4.4.2;uid/863175026618021-a8a6681e316b;pv/87.20;psn/863175026618021-a8a6681e316b|94;psq/15;ref/;pap/JA2015_311210|5.4.1|ANDROID 4.4.2;usc/;ucp/;umd/;utr/;adk/;ads/;Mozilla/5.0 (Linux; Android 4.4.2; NX507J Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.8 TBS/036872 Safari/537.36'})

        print session.cookies.get_dict()
Beispiel #3
0
    def test_phone_charge(self):
        body = {
            "facePrice": "10",
            "isBingding": "0",
            "isNote": "0",
            "jdPrice": "10.00",
            "payType": "0",
            "type": "1",
            "contact": "false",
            "mobile": '945UOUTLqNSLi+9eu1zb1g=='
        }
        # body = {"facePrice": "10", "isBingding": "0", "isNote": "0", "jdPrice": "10.00", "payType": "0",
        #         "type": "1", "contact": "false", "mobile": "945UOUTLqNSLi+9eu1zb1g=="}
        sign = auth.sign('submitPczOrder', self.uuid, json.dumps(body))
        url = 'http://api.m.jd.com/client.action?functionId=submitPczOrder&client=android&clientVersion=5.3.0&build=36639&d_brand=ZTE&d_model=SCH-I779&osVersion=4.4.2&screen=1280*720&partner=tencent&uuid=%s&area=1_0_0_0&networkType=wifi&st=%s&sign=%s&sv=122' % (
            self.uuid, sign[1], sign[0])

        headers = {
            'Charset': 'UTF-8',
            'jdc-backup': self.cookie,
            'Connection': 'close',
            'Cookie': self.cookie,
            'User-Agent':
            'Dalvik/1.6.0 (Linux; U; Android 4.4.2; Nexus Build/KOT49H)',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
        }

        resp = requests.post(url,
                             data='body=' +
                             urllib.quote_plus(json.dumps(body)) + '&',
                             headers=headers)
        print resp.text
Beispiel #4
0
    def get_couponList(self, cookie, id):
        headers = {
            'Accept-Encoding': 'gzip,deflate',
            'jdc-backup': cookie,
            'Cookie': cookie,
            'Charset': 'UTF-8',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'User-Agent': 'Dalvik/1.6.0 (Linux; U; Android 4.4.2;)'
        }
        body = {"pageSize": "100", "page": "1"}
        sign = auth.sign('configCouponList', self.uuid, json.dumps(body))
        resp = requests.post(
            url=
            'http://api.m.jd.com/client.action?functionId=configCouponList&clientVersion=5.8.0&build=42523&client=android&d_brand=nubia&d_model=NX507J&osVersion=4.4.2&screen=1920*1080&partner=jingdong2&uuid=%s&area=1_2802_2821_0&networkType=wifi&st=%s&sign=%s&sv=111'
            % (
                #url = 'http://api.m.jd.com/client.action?functionId=configCouponList&clientVersion=5.8.0&build=42523&client=android&d_brand=&d_model=&osVersion=&screen=1280*720&partner=tencent&uuid=%s&area=1_2802_0_0&networkType=wifi&st=%s&sign=%s&sv=122' % (
                self.uuid,
                sign[1],
                sign[0]),
            data='body=' + urllib.quote(json.dumps(body)) + '&',
            headers=headers)
        logger.debug(resp.url)
        logger.debug(resp.text)

        list = resp.json()
        if id:
            return filter(lambda c: c['id'] == id, list['couponList'])
        else:
            return list
Beispiel #5
0
 def _build_payload(self, message):
     json_msg = json.dumps(message)
     signature = auth.sign(json_msg,
                           self.cfg['keys']['private'])
     return {
         'message': json_msg,
         'signature': signature,
         'username': self.cfg['api']['username']
         }
Beispiel #6
0
def send(plaintext, auth, recipient, ttl=0, **kwargs):
    '''
    Encrypt the contents to a keybase-saltpack; push it to Twitter, GitHub.
    '''
    queue = kwargs['queue'] if 'queue' in kwargs else None
    debug = kwargs['debug'] if 'debug' in kwargs else False
    future = int(datetime.utcnow().strftime('%s')) + ttl
    prefix = 'twitter-message-bus'

    if status(debug):
        LOGGER.info('[keybase-status] client-up; signed-in')

        # Do a look-up on Keybase for a valid recipient ID.
        if lookup(recipient, debug):
            LOGGER.info('[keybase-lookup] %s exists', recipient)
            # Encrypt the document.
            encrypted = encrypt(plaintext, recipient, debug)
            # Sign the document.
            signed = sign(encrypted, debug)
            # Post the gist.
            gist_id, _hash = post(content=signed,
                                  username=recipient,
                                  debug=debug,
                                  token=auth[0])
            if gist_id:
                prefix = '-'.join([prefix, _hash])
                LOGGER.info('[gist] %s', gist_id)

            try:
                # Logic for gists/tweets with TTL.
                if gist_id and ttl and queue and encrypted:
                    message = '~'.join(['gist', gist_id, str(future)])
                    queue.add_job('out', message)
                    LOGGER.info('[gist-queue] added %s to \'out\'', message)

                tweet = None
                if gist_id:
                    tweet = auth[1].update_status(':'.join([prefix, gist_id]))
                    LOGGER.debug('[tweet] %s', tweet)
                    LOGGER.info('[tweet] %s', tweet.id)

                if tweet and ttl and queue:
                    message = '~'.join(['tweet', tweet.id_str, str(future)])
                    queue.add_job('out', message)
                    LOGGER.info('[tweet-queue] added %s to \'out\'', message)

                return gist_id, tweet.id
            except Exception:
                LOGGER.error('[queue] unable to write to queue; data lost!')

        else:
            LOGGER.error('[keybase-lookup] lookup for %s failed!', recipient)

    else:
        LOGGER.error('[keybase-status] client-down/signed-out!')
Beispiel #7
0
def login():
    global cookie
    resp = post("login", {'username': username})
    if resp.status_code != 200:
      return False
    data = json.loads(resp.text)
    client_secret = b64d(data['client_secret'])
    secret = auth.decrypt(client_secret)
    sig = auth.sign(secret)
    resp = post("authorise", {'username': username, 'server_secret': data['server_secret'], 'signature': b64e(str(sig))})
    if resp.status_code == 200:
      cookie = resp.cookies
      return True
    return False
Beispiel #8
0
    def test_queryPczFavourableInfo(self):
        body = {}
        sign = auth.sign('queryPczFavourableInfo', self.uuid, json.dumps(body))
        url = 'http://api.m.jd.com/client.action?functionId=queryPczFavourableInfo&clientVersion=5.8.0&build=42523&client=android&d_brand=nubia&d_model=NX507J&osVersion=4.4.2&screen=1920*1080&partner=waps007&uuid=%s&area=1_0_0_0&networkType=wifi&st=%s&sign=%s&sv=122' % (
            self.uuid, sign[1], sign[0])
        headers = {
            'Charset': 'UTF-8',
            'jdc-backup': self.cookie,
            'Connection': 'close',
            'Cookie': self.cookie,
            'User-Agent': 'Dalvik/1.6.0 (Linux; U; Android 4.4.2; Nexus Build/KOT49H)',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}

        resp = requests.post(url, data='body=' + urllib.quote_plus(json.dumps(body)) + '&', headers=headers)
        print resp.text
Beispiel #9
0
def ws_sample():
    method = "GET"
    path = "/ws"
    sign_headers = {"host": ws_host}
    authorization = sign(ak, sk, method, path, None, sign_headers)
    headers = {
        "hobot_xpush_client_id": "test_client_id",
        "authorization": authorization
    }
    ws = websocket.WebSocketApp("ws://" + ws_host + path,
                                header=headers,
                                on_message=on_message,
                                on_error=on_error,
                                on_close=on_close)
    ws.on_open = ws_on_open
    ws.run_forever()
Beispiel #10
0
def send_message(name, msg):
    keyA, body = auth.aes_encrypt(msg)
    body = b64e(body)
    recipient_key = key_for(name)
    if recipient_key is None:
      return False
    keyA2 = keyA
    keyA = b64e(auth.encrypt(keyA, recipient_key))
    keyA2 = b64e(auth.encrypt(keyA2, auth.public_key()))
    payload = {'sender': username, 'recipient': name, 'body': body, 'key': keyA, 'sender_key': keyA2}
    sig = b64e(str(auth.sign(username+name+body)))
    payload['signature'] = str(sig)
    keyB, payload = auth.aes_encrypt(json.dumps(payload))
    payload = b64e(payload)
    keyB = b64e(auth.encrypt(keyB, auth.server_key()))
    post("messages", {'key': keyB, 'payload': payload})
Beispiel #11
0
    def get_user_info_test(self):
        body = '{"flag":"nickname"}'
        uuid = ''
        sign = auth.sign('newUserInfo', uuid, body)
        print sign

        url = 'http://api.m.jd.com/client.action?functionId=newUserInfo&clientVersion=5.8.0&build=36639&client=android&d_brand=ZTE&d_model=SCH-I779&osVersion=4.4.2&screen=1280*720&partner=tencent&uuid=%s&area=1_2802_0_0&networkType=wifi&st=%s&sign=%s&sv=122' % (
            uuid, sign[1], sign[0])
        print url

        req = requests.post(url, data='body=' + urllib.quote(body) + '&', headers={
            'Charset': 'UTF-8',
            'Connection': 'close',
            'Cookie': self.cookie,
            'User-Agent': 'Dalvik/1.6.0 (Linux; U; Android 4.4.2; Nexus Build/KOT49H)',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'})
        print req.text
Beispiel #12
0
def http_delete(path, method):
    path = path
    method = method
    headers = {"host": http_host, "Content-Type": "application/json"}
    authorization = sign(ak, sk, method, path, None, headers)
    print(authorization)
    headers["authorization"] = authorization
    headers["Method"] = method
    url = "http://" + http_host + path
    if PY3:
        request = urllib.request.Request(url, headers=headers, method=method)
        response = urllib.request.urlopen(request).read()
    else:
        req = urllib2.Request(url, headers=headers)
        req.get_method = lambda: method
        response = urllib2.urlopen(req).read()
    print("respone: ", response)
Beispiel #13
0
def http_post(path, method, body=None):
    path = path
    method = method
    dic = body or {}
    data = json.dumps(dic)
    headers = {"host": http_host, "Content-Type": "application/json"}
    authorization = sign(ak, sk, method, path, None, headers)
    print(authorization)
    headers["authorization"] = authorization
    headers["Method"] = method
    url = "http://" + http_host + path
    if PY3:
        data = bytes(data, 'utf-8')
        request = urllib.request.Request(url, headers=headers, method=method)
        response = urllib.request.urlopen(request, data).read()
    else:
        req = urllib2.Request(url, data, headers=headers)
        response = urllib2.urlopen(req).read()
    print("respone: ", response)
Beispiel #14
0
    def get_h5_cookie(self, cookie):
        body = {"action": "to", "to": 'https%3A%2F%2Ftrain.m.jd.com'}
        sign = auth.sign('genToken', self.uuid, json.dumps(body))
        url = 'http://api.m.jd.com/client.action?functionId=genToken&clientVersion=5.8.0&build=42523&client=android&d_brand=&d_model=&osVersion=&screen=1280*720&partner=tencent&uuid=%s&area=1_2802_0_0&networkType=wifi&st=%s&sign=%s&sv=122' % (
            self.uuid, sign[1], sign[0])

        logger.debug('POST %s' % url)

        headers = {
            'Charset': 'UTF-8',
            'Connection': 'close',
            'Cookie': cookie,
            'User-Agent': self.user_agent,
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
        }

        resp = requests.post(url,
                             data='body=' + urllib.quote(json.dumps(body)) +
                             '&',
                             headers=headers)
        logger.debug('resp:%s' % resp.text)

        resp_body = resp.json()
        # {"code":"0","tokenKey":"AAEAMKMEfWAYh1fRAvE0siwbJrEjuCmaht3Of-dkAaMMpGzemdi7WsCeMn3EaUdejhCZvQ0","url":"http://un.m.jd.com/cgi-bin/app/appjmp"}

        url = 'http://un.m.jd.com/cgi-bin/app/appjmp?tokenKey=' + resp_body[
            'tokenKey'] + '&to=https%3A%2F%2Ftrain.m.jd.com&lbs='

        logger.debug('GET:%s' % url)
        session = requests.session()
        resp = session.get(
            url,
            headers={
                'Accept':
                'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
                'User-Agent': self.user_agent
            },
            verify=False)

        return session.cookies.get_dict()
Beispiel #15
0
def http_get(path, method, params=None):
    path = path
    method = method
    dic = params or {}

    headers = {"host": http_host, "Content-Type": "application/json"}
    authorization = sign(ak, sk, method, path, dic, headers)

    headers["authorization"] = authorization
    headers["Method"] = method
    url = "http://" + http_host + path
    # url = "http://" + http_host + path + '?%s'%params
    if PY3:
        params = urllib.parse.urlencode(dic)
        url = "http://" + http_host + path + '?%s' % params
        request = urllib.request.Request(url, headers=headers)
        response = urllib.request.urlopen(request).read()
    else:
        params = urllib.urlencode(dic)
        url = "http://" + http_host + path + '?%s' % params
        req = urllib2.Request(url, headers=headers)
        response = urllib2.urlopen(req).read()
    print("respone: ", response)
Beispiel #16
0
 def sign_test(self):
     sign_data = auth.sign(
         'newUserInfo',
         base_data.get_random_number() + '-' +
         base_data.get_random_letter_number(12), '{"flag":"nickname"}')
     print sign_data
def phone_charge():
    pool = redis.ConnectionPool(host='139.199.65.115', port=6379, db=0, password='******')
    r = redis.Redis(connection_pool=pool)
    while True:
        order_id = 0
        success = 0

        try:
            print 'redis brpop'
            result = r.brpop('order_platform:phone_charge:order', 5)
            if result:
                trade_no = result[1]
                logger.info('get trade no:%s' % trade_no)
                data = r.hgetall('order_platform:phone_charge:trade_no:%s' % trade_no)
                logger.info('get trade data:%s' % data)
                data['partner'] = json.loads(data['partner'])

                if not data:  # trade data loss
                    save_order({'trade_no': trade_no, 'status': u'数据丢失'})
                    logger.error('trade_no %s data loss' % trade_no)
                    continue
            else:
                continue
        except Exception, e:
            logger.error(e.message)
            time.sleep(5)
            continue

        data['order_handler_time'] = str(datetime.datetime.now())
        data['status'] = '正在下单'
        data['partner_price'] = ''
        data['callback_status'] = ''
        if data.has_key('order_id'):
            order_id = data['order_id']
        else:
            order_id = save_order(data)

        uuid = base_data.get_random_number() + '-' + base_data.get_random_letter_number(12).lower()
        # data = {'mobile':'15763563256','parterner_id':'123654','amount':100,callback:''}
        mobile = des_encryption(data['mobile'])
        account = get_account(uuid)

        if not account:
            r.set('order_platform:switch:order_accpet', 0)
            data['status'] = '下单失败'
            data['err'] = '账号不足'
            callback_partner_and_save_order(data, 0, order_id)
            continue

        data['account'] = account
        pc_cookie = account['pc_cookie']
        try:
            headers = {
                'Charset': 'UTF-8',
                'jdc-backup': account['cookie'],
                'Connection': 'close',
                'Cookie': account['cookie'],
                'User-Agent': 'Dalvik/1.6.0 (Linux; U; Android 4.4.2; Nexus Build/KOT49H)',
                'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
            body = {"mobile": mobile}
            sign = auth.sign('searchPczPriceList', uuid, json.dumps(body))
            url = 'http://api.m.jd.com/client.action?functionId=searchPczPriceList&clientVersion=5.8.0&build=42523&client=android&d_brand=nubia&screen=1920*1080&partner=waps007&uuid=%s&area=1_0_0_0&networkType=wifi&st=%s&sign=%s&sv=122' % (
                uuid, sign[1], sign[0])

            logger.info('get jd price')
            resp = requests.post(url, data='body=' + urllib.quote_plus(json.dumps(body)) + '&', headers=headers)
            resp = resp.json()
            data['providerName'] = resp['providerName']
            data['areaName'] = resp['areaName']

            data['partner_price'] = data['partner']['price'][resp['providerName']]
            # if data['providerName'] == u'移动':
            #     data['partner_price'] = 98
            # elif data['providerName'] == u'联通':
            #     data['partner_price'] = 98
            # else:
            #     data['partner_price'] = 97

            sku = filter(lambda s: s['facePrice'] == str(data['amount']), resp['skuList'])
            if len(sku) == 0:
                data['status'] = '数据丢失'
                callback_partner_and_save_order(data, 0, order_id)
                continue

            logger.info('get compon')
            sign = auth.sign('queryPczFavourableInfo', uuid, json.dumps(body))
            url = 'http://api.m.jd.com/client.action?functionId=queryPczFavourableInfo&clientVersion=5.8.0&build=42523&client=android&d_brand=nubia&screen=1920*1080&partner=waps007&uuid=%s&area=1_0_0_0&networkType=wifi&st=%s&sign=%s&sv=122' % (
                uuid, sign[1], sign[0])

            resp = requests.post(url, data='body=' + urllib.quote_plus(json.dumps(body)) + '&', headers=headers)
            resp = resp.json()
            logger.debug(resp)
            if len(resp['dxqInfos']) > 0:
                data['discount'] = resp['dxqInfos'][0]['discount']  # 优惠金额
                data['dxqids'] = resp['dxqInfos'][0]['id']
            else:
                data['status'] = '没有优惠券'
                while True:
                    try:
                        logger.error('account compon not found,send to server')
                        account['valid_message'] = '没有优惠券'
                        account['valid'] = 0
                        resp = requests.post(base_data.JD_ACCOUNT_API_POST, json=account)
                        logger.info('resp:%s' % resp.text)
                        if resp.text == '1':
                            logger.info('success')
                            break
                        else:
                            time.sleep(60)
                            continue
                    except Exception, e:
                        time.sleep(60)
                        continue

                callback_partner_and_save_order(data, 0, order_id)
                continue

            data['jd_price'] = float(sku[0]['jdPrice']) / 100 - data['discount']
            body = {"dxqids": data['dxqids'], "facePrice": data['amount'], "isBingding": "0", "isNote": "0",
                    "jdPrice": str(data['jd_price']),
                    "payType": "10", "type": "1", "contact": "false", "mobile": mobile}

            # data['jd_price'] = float(sku[0]['jdPrice']) / 100
            # # "dxqids": "7929697981",
            # body = {"facePrice": data['amount'], "isBingding": "0", "isNote": "0",
            #         "jdPrice": str(data['jd_price']),
            #         "payType": "0", "type": "1", "contact": "false", "mobile": mobile}
            sign = auth.sign('submitPczOrder', uuid, json.dumps(body))
            url = 'http://api.m.jd.com/client.action?functionId=submitPczOrder&client=android&clientVersion=5.8.0&build=42523&osVersion=4.4.2&screen=1280*720&partner=tencent&uuid=%s&area=1_0_0_0&networkType=wifi&st=%s&sign=%s&sv=122' % (
                uuid, sign[1], sign[0])
            body = 'body=' + urllib.quote_plus(json.dumps(body)) + '&'
            logger.debug('POST %s\n%s' % (url, body))
            resp = requests.post(url, data=body, headers=headers)
            ret = resp.json()
            logger.debug(resp.text)
            if ret.has_key('orderId'):
                data['jd_order_id'] = ret['orderId']
                data['money'] = ret['money']
                data['status'] = u'下单成功'
                success = 1
                logger.info('%s charge success,callback' % data['mobile'])
            else:
                data['status'] = u'下单失败'
                logger.error('%s charge faild\n%s' % (data['mobile'], traceback.format_exc()))
Beispiel #18
0
    def test_get_wx_payinfo2(self):
        cookie = 'pin=jd_4c25331e9e318; wskey=AAFZFCJnAEApyqAxlSJkcJq5PpfyEQJP3AzScHZMPYnJil_OUyj_Nplm6EMUtplSPLrmze_4_A_dnePgOgpA3ZPb-PcAOnPL; whwswswws='
        h5_cookie = {
            'mobilev': 'touch',
            'pt_key':
            'app_openAAFZFCJrADDn-sSej1_DxCnX2huF62fiLmAr7HLgBgj8Of4jJFwXgzpPRI0qQOQfNsvRNQ0b95k',
            'pwdt_id': 'jd_4c25331e9e318',
            'sid': 'f4686d600dab33e26b0427afa298f5cw',
            'guid':
            '2bc17003cc1916830d40e7d84c4d6523ae691c8936569e8cdac7479c22e02b07',
            'pt_pin': 'jd_4c25331e9e318'
        }

        session = requests.session()
        resp = requests.get(
            'https://train.m.jd.com/pay/goToPay?orderId=53087782937&trainOrderId=5751638&onlinePayFee=19.50',
            headers={
                'Charset': 'UTF-8',
                'Connection': 'close',
                'Cookie':
                'mobilev=touch,pt_key=app_openAAFZFCJrADDn-sSej1_DxCnX2huF62fiLmAr7HLgBgj8Of4jJFwXgzpPRI0qQOQfNsvRNQ0b95k,pwdt_id=jd_4c25331e9e318,sid=f4686d600dab33e26b0427afa298f5cw,guid=2bc17003cc1916830d40e7d84c4d6523ae691c8936569e8cdac7479c22e02b07,pt_pin=jd_4c25331e9e318',
                'User-Agent':
                'jdapp;android;6.0.0;4.4.2;863175026618021-a8a6681e316b;network/wifi;osp/android;apv/6.0.0;osv/4.4.2;uid/863175026618021-a8a6681e316b;pv/210.81;psn/863175026618021-a8a6681e316b|211;psq/25;ref/;pap/JA2015_311210|6.0.0|ANDROID 4.4.2;usc/direct;ucp/-;umd/none;utr/-;adk/;ads/;jdv/;Mozilla/5.0 (Linux; Android 4.4.2; NX507J Build/KVT49L; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043124 Safari/537.36',
                'Content-Type':
                'application/x-www-form-urlencoded; charset=UTF-8'
            },
            verify=False)  # ,allow_redirects=False
        pay_url = resp.url
        query = pay_url[pay_url.index('?') + 1:].split('&')
        payload = {}
        for q in query:
            q = q.split('=')
            payload[q[0]] = q[1]

        payload['appId'] = 'jd_android_app4'
        # payload['payId']='4d5f1ae1294a40f3aa4fa1d749e8d1a7'
        # print pay_url,query,payload

        headers = {
            'Connection':
            'keep-alive',
            'Pragma':
            'no-cache',
            'Cache-Control':
            'no-cache',
            'Accept':
            '*/*',
            'Origin':
            'https://pay.m.jd.com',
            'X-Requested-With':
            'XMLHttpRequest',
            'User-Agent':
            'jdapp;android;6.0.0;6.0;861012032753710-f823b2dbaddc;network/wifi;osp/android;apv/6.0.0;osv/6.0;uid/861012032753710-f823b2dbaddc;pv/1.45;psn/861012032753710-f823b2dbaddc|3;psq/6;ref/;pap/JA2015_311210|6.0.0|ANDROID 6.0;usc/direct;ucp/-;umd/none;utr/-;adk/;ads/;jdv/;hasUPPay/0;Mozilla/5.0 (Linux; Android 6.0; CAM-AL00 Build/HONORCAM-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043220 Safari/537.36',
            'Content-Type':
            'application/x-www-form-urlencoded',
            'Referer':
            'https://pay.m.jd.com/cpay/index.html?appId=jd_android_app4&payId='
            + payload['payId'],
            'Accept-Encoding':
            'gzip, deflate',
            'Accept-Language':
            'zh-CN,en-US;q=0.8',
            'Cookie':
            cookie
        }
        resp = requests.post('https://pay.m.jd.com/newpay/index.action',
                             data='appId=jd_android_app4&payId=' +
                             payload['payId'] + '&_format_=JSON',
                             headers=headers)
        print resp.text

        uuid = base_data.get_random_number(
        ) + '-' + base_data.get_random_letter_number(12).lower()
        headers = {
            'Accept-Encoding':
            'gzip,deflate',
            'Cookie':
            cookie,
            'Charset':
            'UTF-8',
            'Content-Type':
            'application/x-www-form-urlencoded',
            'User-Agent':
            'Dalvik/1.6.0 (Linux; U; Android 4.2.2; GT-P5210 Build/JDQ39E)'
        }
        print json.dumps(payload)
        sign = auth.sign('weixinPay', uuid, json.dumps(payload))
        resp = requests.post(
            url=
            'https://pay.m.jd.com/index.action?functionId=weixinPay&clientVersion=5.8.0&build=42523&client=android&d_brand=Xiaomi&d_model=Mi4&osVersion=4.2.2&screen=1440*810&partner=goapk001&uuid=%s&area=19_1709_20093_0&networkType=wifi&st=%s&sign=%s&sv=122'
            % (
                # url = 'http://api.m.jd.com/client.action?functionId=configCouponList&clientVersion=5.8.0&build=42523&client=android&d_brand=&d_model=&osVersion=&screen=1280*720&partner=tencent&uuid=%s&area=1_2802_0_0&networkType=wifi&st=%s&sign=%s&sv=122' % (
                uuid,
                sign[1],
                sign[0]),
            data='body=%7B%22payId%22%3A%22' + payload['payId'] +
            '%22%2C%22appId%22%3A%22jd_android_app4%22%7D&',
            # 'body=' + urllib.quote(json.dumps(payload))+ '&',
            headers=headers)
        print resp.text
Beispiel #19
0
    def test_get_wx_payinfo(self):
        cookie = 'pin=jd_417181296b3ba; wskey=AAFZCEPFAECu4cCwW_BItToNjJMdjva2TkDa-NfZ8lXY9Tc71Ez8teFvoHKgIPYis4xLutBE8792x58wEkTcT2zhMnEVSR-w; whwswswws='
        h5_cookie = {
            'mobilev': 'touch',
            'pt_key':
            'app_openAAFZCEPFADC0pTiZdMxn3QlFk3jh8Pr60qhjMOO07np7zyLdJmKX1QuNA6sF-SWkKULi6p35kk8',
            'pwdt_id': 'jd_417181296b3ba',
            'sid': '07713da596d5a6c7c0aaa19ebfff3b7w',
            'guid':
            '5b317f5a3d5b7af09d4ba69b901966e066bfd06b1b35a64e5b95ad5d264e41aa',
            'pt_pin': 'jd_417181296b3ba'
        }

        resp = requests.get(
            'https://train.m.jd.com/pay/goToPay?orderId=51990280826&trainOrderId=5567188&onlinePayFee=18.5',
            headers={
                'Charset': 'UTF-8',
                'Connection': 'close',
                'Cookie':
                'mobilev=touch,pt_key=app_openAAFZCEPFADC0pTiZdMxn3QlFk3jh8Pr60qhjMOO07np7zyLdJmKX1QuNA6sF-SWkKULi6p35kk8,pwdt_id=jd_417181296b3ba,sid=07713da596d5a6c7c0aaa19ebfff3b7w,guid=5b317f5a3d5b7af09d4ba69b901966e066bfd06b1b35a64e5b95ad5d264e41aa,pt_pin=jd_417181296b3ba',
                'Upgrade-Insecure-Requests:': '1',
                'User-Agent':
                'JD4iPhone/134623 (iPhone; iOS 8.1.3; Scale/2.00)',
                'Content-Type':
                'application/x-www-form-urlencoded; charset=UTF-8'
            },
            verify=False)  # ,allow_redirects=False
        pay_url = resp.url
        query = pay_url[pay_url.index('?') + 1:].split('&')
        payload = {}
        for q in query:
            q = q.split('=')
            payload[q[0]] = q[1]
        print pay_url, query, payload

        uuid = base_data.get_random_number(
        ) + '-' + base_data.get_random_letter_number(12).lower()
        headers = {
            'Accept-Encoding': 'gzip,deflate',
            'jdc-backup': cookie,
            'Cookie': cookie,
            'Charset': 'UTF-8',
            'Connection': 'Keep-Alive',
            'Cache-Control': 'no-cache',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'User-Agent': 'JD4iPhone/134623 (iPhone; iOS 8.1.3; Scale/2.00)'
        }
        # payload['appId']='jd_iphone_app4'
        print json.dumps(payload)
        sign = auth.sign('weixinPay', uuid, json.dumps(payload))

        resp = requests.post(
            url=
            'http://api.m.jd.com/client.action?functionId=weixinPay&clientVersion=5.8.0&build=42523&client=android&d_brand=nubia&d_model=NX507J&osVersion=4.4.2&screen=1920*1080&partner=jingdong2&uuid=%s&area=1_2802_2821_0&networkType=wifi&st=%s&sign=%s&sv=111'
            % (
                # url = 'http://api.m.jd.com/client.action?functionId=configCouponList&clientVersion=5.8.0&build=42523&client=android&d_brand=&d_model=&osVersion=&screen=1280*720&partner=tencent&uuid=%s&area=1_2802_0_0&networkType=wifi&st=%s&sign=%s&sv=122' % (
                uuid,
                sign[1],
                sign[0]),
            data='body=' + urllib.quote(json.dumps(payload)) + '&',
            headers=headers)
        # resp = requests.post(
        #     url='http://pay.m.jd.com/index.action?functionId=weixinPay',
        #     data='body=' + urllib.quote(json.dumps(payload)) + 'adid=9A72E17A-8D8C-4877-A781-35CEBB8C6E38&area=19_1607_3155_0&build=134623&client=apple&clientVersion=5.8.0&d_brand=apple&d_model=iPhone7%2C2&isBackground=N&networkType=wifi&networklibtype=JDNetworkBaseAF&openudid=dc8015f619f669cf0008bc9ea2e98f5908eec7c9&osVersion=8.1.3&partner=pp601&screen=750%2A1334&'+'uuid=%s&st=%s&sign=%s&sv=100'% (
        #         # url = 'http://api.m.jd.com/client.action?functionId=configCouponList&clientVersion=5.8.0&build=42523&client=android&d_brand=&d_model=&osVersion=&screen=1280*720&partner=tencent&uuid=%s&area=1_2802_0_0&networkType=wifi&st=%s&sign=%s&sv=122' % (
        #         uuid, sign[1], sign[0]),
        #     headers=headers)
        print resp.json()
def sync_status_from_jd():
    pool = redis.ConnectionPool(host='139.199.65.115', port=6379, db=0, password='******')
    r = redis.Redis(connection_pool=pool)
    while True:
        retry = 0
        try:
            print 'redis brpop'
            result = r.brpop('order_platform:phone_charge:order_pay_success', 5)
            if result:
                resp = result[1]
                logger.info('get order:%s' % resp, program='sync_status_from_jd')

                # resp = requests.get(base_data.ORDER_API_GET + id)
                # resp = resp.json()
                if (resp):
                    order = json.loads(resp)
                    order_sync_jd_status_time = str(datetime.datetime.now())
                    cookie = order['account']['cookie']
                    logger.info('get status', order['trade_no'], 'sync_status_from_jd')
                    uuid = base_data.get_random_number() + '-' + base_data.get_random_letter_number(12).lower()
                    headers = {
                        'Charset': 'UTF-8',
                        'jdc-backup': cookie,
                        'Connection': 'close',
                        'Cookie': cookie,
                        'User-Agent': 'okhttp/3.2.0',
                        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}
                    body = {"orderId": order['jd_order_id']}
                    sign = auth.sign('queryPczOrderInfo', uuid, json.dumps(body))
                    url = 'http://api.m.jd.com/client.action?functionId=queryPczOrderInfo&clientVersion=5.8.0&build=42523&client=android&screen=1920*1080&partner=waps007&uuid=%s&area=1_0_0_0&networkType=wifi&st=%s&sign=%s&sv=122' % (
                        uuid, sign[1], sign[0])
                    body = 'body=' + urllib.quote_plus(json.dumps(body)) + '&'
                    while True:
                        resp = requests.post(url, data=body, headers=headers)
                        ret = resp.json()
                        logger.debug('get jd response:%s' % resp.text, order['trade_no'], 'sync_status_from_jd')
                        # print ret
                        jd_order_status = ret['rechargeOrder']['orderStatusName']
                        logger.info(jd_order_status, order['trade_no'], 'sync_status_from_jd')
                        if jd_order_status == u'充值成功':
                            logger.info('send to queue order_platform:phone_charge:order_success', order['trade_no'],
                                        'sync_status_from_jd')
                            order['order_sync_jd_status_time'] = order_sync_jd_status_time
                            r.lpush('order_platform:phone_charge:order_success', json.dumps(order))
                            break
                        elif jd_order_status == u'等待付款' or u'充值失败' in jd_order_status:
                            logger.info(
                                'lpush %s to queue order_platform:phone_charge:order_faild' % order['trade_no'],
                                order['trade_no'], 'sync_status_from_jd')
                            r.lpush('order_platform:phone_charge:order_faild', json.dumps(
                                {'trade_no': order['trade_no'], 'order_faild_time': order_sync_jd_status_time}))
                            break
                        else:
                            pay_callback_time = int(
                                time.mktime(time.strptime(order['pay_callback_time'], '%Y-%m-%d %H:%M:%S')))
                            t = int(time.time())
                            if t - pay_callback_time < 15 * 60:
                                retry += 1
                                if retry < 2:
                                    time.sleep(5)
                                    # time.sleep(2)
                                    continue
                                else:
                                    logger.info(
                                        'timeout,lpush %s  to queue order_platform:phone_charge:order_pay_success' %
                                        order['trade_no'], order['trade_no'], 'sync_status_from_jd')
                                    r.lpush('order_platform:phone_charge:order_pay_success', order['trade_no'])
                                    break
                            else:
                                logger.info('charge timeout and need customer service verifies,set status',
                                            order['trade_no'], 'sync_status_from_jd')
                                resp = requests.post(base_data.ORDER_SETSTATUS_API_POST,
                                                     data={'order_id': order['trade_no'], 'status': '超时待人工核实'})
                                logger.info(resp.text, order['trade_no'], 'sync_status_from_jd')
                                break
                else:
                    logger.error('cant find order %s' % id, program='sync_status_from_jd')
            else:
                continue
        except Exception, e:
            logger.error(e.message, program='sync_status_from_jd')
            time.sleep(5)
            continue