青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Benjamin

靜以修身,儉以養(yǎng)德,非澹薄無以明志,非寧靜無以致遠。
隨筆 - 398, 文章 - 0, 評論 - 196, 引用 - 0
數(shù)據(jù)加載中……

python服務(wù)器 實現(xiàn)app微信支付:請求訂單

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import tornado.web
from methods.common import *
from methods.db import *
import traceback
import logging
import uuid
import requests
import json
import xmltodict
import time
import pymysql
import datetime
import random
from hashlib import md5
#數(shù)據(jù)庫
MYSQL = dict(
    host='127.0.0.1', user='root', passwd='123456', db='kbe', charset="utf8mb4"
)
logger = logging.getLogger(__name__)
conn = pymysql.connect(**MYSQL)
cur_dict = conn.cursor(pymysql.cursors.DictCursor)
cur = conn.cursor()
from hashlib import md5
from requests.packages import urllib3
urllib3.disable_warnings()
###############################################
#############    微信支付配置   #################
###############################################
WeChaPayConfig = {
    # 微信支付APP_ID
    'APPID' : 'wx91f04ffbf8a23431',
    # 微信支付MCH_ID 【登錄賬號】
    'MCHID' : '1535411231',
    # 微信支付sign_type
    'SIGNTYPE' : 'MD5',
    # 服務(wù)器IP地址
    'SPBILLCREATEIP' : '32.23.11.34',
    # 微信支付用途
    'BODY' : '費用充值',
    # 微信KEY值 【API密鑰】
    'KEY' : 'ZiwcVpWomDqixQdhRgm5FpBKNXqwasde',
    # 微信統(tǒng)一下單URL
    'UNIFIEDORDERURL' : 'https://api.mch.weixin.qq.com/pay/unifiedorder',
    # 微信查詢訂單URL
    'QUERYORDERURL' : 'https://api.mch.weixin.qq.com/pay/orderquery',
    # 微信支付回調(diào)API
    'CALLBACKAPI' : 'http://xxxx.com/weixinpay_rollback/',
}
def make_payment_info(notify_url=None, out_trade_no=None, total_fee=None,device_info = 'Phone'):
    order_info = {'appid': WEIXIN_APP_ID,
                  'mch_id': WEIXIN_MCH_ID,
                  'device_info': device_info,
                  'nonce_str': '',
                  'sign_type': WEIXIN_SIGN_TYPE,
                  'body': WEIXIN_BODY,
                  'out_trade_no': str(out_trade_no),
                  'total_fee': total_fee,
                  'spbill_create_ip': WEIXIN_SPBILL_CREATE_IP,
                  'notify_url': notify_url,
                  'trade_type': 'APP'}
    return order_info
def make_payment_request_wx(notify_url, out_trade_no, total_fee,device_info):
    """
    微信統(tǒng)一下單,并返回客戶端數(shù)據(jù)
    :param notify_url: 回調(diào)地址
    :param out_trade_no: 訂單編號
    :param total_fee: 充值金額
    :param device_info:設(shè)備信息
    :return: app所需結(jié)果數(shù)據(jù)
    """
    def generate_call_app_data(params_dict, prepay_id):
        """
        客戶端APP的數(shù)據(jù)參數(shù)包裝
        """
        request_order_info = {'appid': params_dict['appid'],
                              'partnerid': params_dict['mch_id'],
                              'prepayid': prepay_id,
                              'package': 'Sign=WXPay',
                              'noncestr': generate_nonce_str(),
                              'timestamp': str(int(time.time()))}
        request_order_info['sign'] = generate_sign(request_order_info)
        return request_order_info
    def generate_sign(params):
        """
        生成md5簽名的參數(shù)
        """
        if 'sign' in params:
            params.pop('sign')
        src = '&'.join(['%s=%s' % (k, v) for k, v in sorted(params.items())]) + '&key=%s' % WEIXIN_KEY
        return md5(src.encode('utf-8')).hexdigest().upper()
    def generate_nonce_str():
        """
        生成隨機字符串
        """
        return str(uuid.uuid4()).replace('-', '')
    def generate_request_data(params_dict):
        """
        生成統(tǒng)一下單請求所需要提交的數(shù)據(jù)
        """
        params_dict['nonce_str'] = generate_nonce_str()
        params_dict['sign'] = generate_sign(params_dict)
        return xmltodict.unparse({'xml': params_dict}, pretty=True, full_document=False).encode('utf-8')
    def make_payment_request(params_dict, unified_order_url):
        """
        生成返回給客戶端APP的數(shù)據(jù)參數(shù)
        """
        data = generate_request_data(params_dict)
        headers = {'Content-Type': 'application/xml'}
        res = requests.post(unified_order_url, data=data, headers=headers,verify=False)
        if res.status_code == 200:
            result = json.loads(json.dumps(xmltodict.parse(res.content)))
            if result['xml']['return_code'] == 'SUCCESS':
                prepay_id = result['xml']['prepay_id']
                return generate_call_app_data(params_dict, prepay_id), result['xml']
            else:
                return result['xml']['return_msg'], None
        print('http錯誤碼:::::::{0}'.format(str(res)))
        return None, None
    if float(total_fee) < 0.01:
        raise Exception('充值金額不能小于0.01')
    payment_info = make_payment_info(notify_url=notify_url, out_trade_no=out_trade_no, total_fee=total_fee,device_info=device_info)
    res, info = make_payment_request(payment_info, WEIXIN_UNIFIED_ORDER_URL)
    print('微信支付 res={0} info={1}'.format(res,info))
    return res, info
def create_order_number():
    """
    生成訂單號
    :return:
    """
    date = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
    # 生成4為隨機數(shù)作為訂單號的一部分
    random_str = str(random.randint(1, 9999))
    random_str = random_str.rjust(4, '0')
    rtn = '%s%s' % (date, random_str)
    return rtn
def weixin_create_order(money,UserId,itemId):
    """
    【API】: 創(chuàng)建訂單,供商戶app調(diào)用
    """
    #金額,浮點型
    #設(shè)備信息:pid:tm
    device_info = str(UserId)
    res = {
        'code': 1,
        'msg': 'error'
    }
    try:
        price = money#0.01  # 0.99元,微信的單位為分,需要轉(zhuǎn)為分
        out_trade_no = create_order_number()
        order_info, info = make_payment_request_wx(WEIXIN_CALLBACK_API, out_trade_no, int(float(price) * 100),device_info)
        if order_info and info:
            print('產(chǎn)生訂單返回=======')
            print(info)
            info['total_amount'] = int(float(price) * 100)
            if info['result_code'] == "SUCCESS":
                order_info['out_trade_no'] = out_trade_no
                res['order_info'] = order_info
                if isinstance(order_info,dict):
                    order_info['pid'] = UserId
                    order_info['itemId'] = itemId
                #待微信服務(wù)器校驗后再行入庫
                print('客戶端返回')
                print(order_info)
                #入庫
                WeiChatPayAdd(int(UserId), out_trade_no,WEIXIN_MCH_ID,WEIXIN_APP_ID)
                return order_info
            # 調(diào)用統(tǒng)一創(chuàng)建訂單接口失敗
            else:
                res['msg'] = info['result_code']
        elif order_info:
            res['msg'] = order_info
            res['code'] = -1
        else:
            res['code'] = -2
        return None
    except Exception as e:
        # traceback.print_exc()
        print(e)
        return None
    # finally:
    #     return json.dumps(res)
class WeChatOrderHandler(tornado.web.RequestHandler):
    def post(self):
        """客戶端發(fā)來的請求微信訂單"""
        def pro(recv):
            if recv:
                if recv.__contains__('UserId'):            #玩家id
                    userId = str(recv.pop('UserId')[0], encoding='utf-8')
                    if recv.__contains__('money'):        #金額
                        money = str(recv.get('money')[0], encoding='utf-8')
                        if recv.__contains__('itemId'):   #商品
                            itemId = str(recv.get('itemId')[0],encoding='utf-8')
                    print('微信支付參數(shù) pid={0},,money={1}'.format(userId, money))
                    #這里的post必須是同步阻塞,這里可以存入更多的設(shè)備信息在weixin_create_order的第三個參數(shù)里
                    response = weixin_create_order(money,userId,itemId)
                    # """返回到客戶端"""
                    if response=='':
                        print('錯誤=====')
                    else:
                        #返回到客戶端(必須是異步post請求)
                        requests.post('http://localhost:30041/wechat', data=response)
        self.write('Success')
        recv1 = self.request.arguments
        from threading import Timer
        # 指定1秒后執(zhí)行
        t = Timer(1.0, pro,(recv1,))
        t.start() 

posted on 2020-12-05 15:26 Benjamin 閱讀(289) 評論(0)  編輯 收藏 引用 所屬分類: python

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区在线影院| 久久亚洲一区二区三区四区| 女女同性女同一区二区三区91| 久久国产主播精品| 在线观看亚洲视频| 亚洲黄色一区| 国产精品国产三级国产普通话99 | 亚洲综合社区| 精品盗摄一区二区三区| 99re8这里有精品热视频免费| 国内精品久久久久久| 亚洲国产合集| 国产亚洲精品久久久久动| 亚洲经典三级| 国产一区二区三区自拍| 99亚洲一区二区| 在线国产欧美| 午夜在线一区| 亚洲一区二区黄| 免费在线播放第一区高清av| 久久国产99| 欧美午夜寂寞影院| 亚洲黑丝一区二区| 在线播放国产一区中文字幕剧情欧美| 亚洲激情在线观看视频免费| 亚洲欧美第一页| 一本久久综合亚洲鲁鲁| 久久久xxx| 欧美一区二区播放| 欧美日韩精品在线播放| 欧美国产在线电影| 国产一区二区高清| 亚洲直播在线一区| 亚洲一区二区三区免费视频| 欧美激情成人在线视频| 欧美成人精品一区二区| 国产乱码精品一区二区三区不卡| 亚洲精品偷拍| 亚洲免费激情| 欧美激情在线观看| 欧美激情一区二区| 亚洲国产一二三| 久久噜噜噜精品国产亚洲综合| 午夜精品www| 国产精品伦子伦免费视频| 一本大道久久a久久精品综合| 亚洲毛片在线观看| 欧美精品久久99| 亚洲精品一区在线观看| 妖精成人www高清在线观看| 欧美高清在线| 亚洲免费黄色| 亚洲免费网址| 国产乱码精品| 欧美在线一二三四区| 久久色在线播放| 在线观看日韩www视频免费 | 亚洲综合国产精品| 欧美日韩视频| 亚洲午夜极品| 久久精品亚洲一区二区| 黄色精品一二区| 久久免费99精品久久久久久| 欧美多人爱爱视频网站| 亚洲精品国产精品国自产观看| 欧美多人爱爱视频网站| 夜色激情一区二区| 亚洲免费在线电影| 国产欧美日韩三区| 久久人人97超碰精品888 | 久久精品日韩| 农夫在线精品视频免费观看| 亚洲精品日韩激情在线电影| 欧美日韩亚洲一区二区三区四区| 亚洲婷婷在线| 久久久久久尹人网香蕉| 亚洲国产三级网| 欧美日韩亚洲高清| 欧美一级久久| 亚洲福利视频一区| 亚洲尤物视频在线| 一区三区视频| 欧美日韩国产色综合一二三四| 国产精品99久久久久久有的能看| 久久精品91久久香蕉加勒比| 亚洲成人在线网站| 欧美人与禽猛交乱配视频| 亚洲欧美日韩在线高清直播| 欧美14一18处毛片| 亚洲深夜福利网站| 国内一区二区三区| 欧美日本一区二区视频在线观看 | 欧美无乱码久久久免费午夜一区 | 欧美一区二区性| 亚洲国产高清一区二区三区| 欧美亚洲第一页| 老司机精品视频网站| 中日韩视频在线观看| 免费看黄裸体一级大秀欧美| 亚洲视频综合在线| 在线观看视频一区| 国产精品户外野外| 欧美jizzhd精品欧美喷水 | 亚洲免费精彩视频| 久久精品国产亚洲5555| 久久夜色精品国产噜噜av| 亚洲欧洲精品一区二区| 欧美淫片网站| 国产视频亚洲| 亚洲毛片在线| 亚洲精品美女久久7777777| 欧美精品尤物在线| 亚洲精品日韩久久| 欧美成人激情视频| 能在线观看的日韩av| 亚洲精品一区二区在线| 久久午夜色播影院免费高清| 亚洲一卡久久| 日韩视频免费| 亚洲国产成人精品女人久久久| 国产嫩草影院久久久久| 欧美精品在线一区二区| 久久久久久日产精品| 欧美一区二区三区日韩| 亚洲图片自拍偷拍| 亚洲日本中文字幕| 亚洲第一精品福利| 你懂的网址国产 欧美| 老司机午夜精品视频| 久久精品中文字幕免费mv| 欧美一区二区三区电影在线观看| 一区二区久久久久| 亚洲裸体在线观看| 一本一本大道香蕉久在线精品| 亚洲精品国产拍免费91在线| 亚洲黄色高清| 91久久久久久久久| 亚洲国产婷婷香蕉久久久久久99 | 久久久久久国产精品一区| 久久成人精品电影| 欧美中文在线免费| 久久精品成人一区二区三区| 久久不见久久见免费视频1| 性色av一区二区三区在线观看| 亚洲欧美日本国产专区一区| 亚洲免费视频在线观看| 欧美亚洲日本国产| 久久精品国产亚洲精品| 久久久国产精品一区二区中文| 久久精品av麻豆的观看方式| 久久日韩粉嫩一区二区三区| 欧美成人午夜剧场免费观看| 亚洲国产成人不卡| 亚洲精品一二三| 欧美日韩国产综合网| 欧美日本国产精品| 欧美日韩蜜桃| 国产精品久久久久久久久动漫 | 日韩特黄影片| 亚洲天堂久久| 久久国产精品99精品国产| 久久资源av| 欧美日韩一级片在线观看| 国产精品一区亚洲| 在线免费不卡视频| 艳妇臀荡乳欲伦亚洲一区| 亚洲欧美制服另类日韩| 久久久精品动漫| 亚洲国产三级网| 亚洲尤物在线视频观看| 久久国产精品久久久久久久久久| 六月婷婷久久| 国产精品久久久久久久久果冻传媒 | 欧美视频免费| 国产精品一区二区女厕厕| 在线精品视频一区二区三四| 亚洲看片一区| 欧美影视一区| 亚洲第一福利在线观看| 亚洲一二区在线| 久久综合精品国产一区二区三区| 欧美成va人片在线观看| 亚洲精品欧美一区二区三区| 亚洲男女毛片无遮挡| 亚洲成色777777女色窝| 久久偷看各类wc女厕嘘嘘偷窃| 亚洲黄色一区| 午夜亚洲视频| 午夜精品免费视频| 一区二区高清视频在线观看| 亚洲私拍自拍| 国产手机视频精品| 日韩视频二区| 女女同性精品视频| 在线午夜精品自拍| 久久在线视频| 国产一区二区无遮挡| 亚洲自啪免费| 亚洲国产欧美日韩另类综合| 欧美一区二区黄色|