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

Benjamin

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

python服務器 實現app微信支付:支付異步通知

# -*- coding: utf-8 -*-
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import pymysql
import json
import xmltodict
from hashlib import md5
from tornado.options import define, options
####################微信支付異步回調消息########################
WEIXIN_KEY = '8mdRLb1yeesYssfasdfsadfassdaV'
def generate_sign(params):
    """
    生成md5簽名的參數
    """
    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 validate_sign(resp_dict):
    """
    驗證微信返回的簽名
    """
    if 'sign' not in resp_dict:
        return False
    wx_sign = resp_dict['sign']
    sign = generate_sign(resp_dict)
    if sign == wx_sign:
        return True
    return False
def handle_wx_response_xml(params):
    """
    處理微信支付返回的xml格式數據
    """
    try:
        resp_dict = xmltodict.parse(params)['xml']
        if not resp_dict or len(resp_dict) < 1:
            print('resp_dict is zero+++++++++')
            return None
        return_code = resp_dict.get('return_code')
        if return_code == 'SUCCESS':  # 僅僅判斷通信標識成功,非交易標識成功,交易需判斷result_code
            if validate_sign(resp_dict):
                print('驗證成功!!!')
                return resp_dict
       
    except Exception as e:
        print(e)
        return None
    return None
def weixinpay_call_back(request):
    """
    微信支付回調
    :param request: 回調參數
    :return:
    """
    args = str(request.body,'utf-8')
    if args is None:
        return None
    print(args)
    # 驗證平臺簽名
    resp_dict = handle_wx_response_xml(args)
    if resp_dict is None:
        print('簽名驗證失敗!!!')
        return None
    return resp_dict
def weixinpay_response_xml(params):
    """
    生成交易成功返回信息
    """
    def generate_response_data(resp_dict):
        """
        字典轉xml
        """
        return xmltodict.unparse({'xml': resp_dict}, pretty=True, full_document=False).encode('utf-8')
    return_info = {
        'return_code': params,
        'return_msg': 'OK'
    }
    return generate_response_data(return_info)
def weixinpay_sucess_db(dicts):
    """微信支付成功后數據庫日志操作"""
    if isinstance(dicts,dict):
        trade_status = dicts['result_code']  # 業務結果  SUCCESS/FAIL
        trade_no = dicts['out_trade_no']  # 商戶訂單號
        if trade_status == "SUCCESS":
            appid = dicts['appid']  # 應用ID
            bank_type = dicts['bank_type']  # 付款銀行
            cash_fee = dicts['cash_fee']  # 現金支付金額(分)
            device_info = dicts['device_info']  # 微信支付分配的終端設備號
            fee_type = dicts['fee_type']  # 貨幣種類
            gmt_create = dicts['time_end']  # 支付完成時間
            total_amount = int(dicts['total_fee']) / 100  # 總金額(單位由分轉元)
            trade_type = dicts['trade_type']  # 交易類型
            out_trade_no = dicts['transaction_id']  # 微信支付訂單號
            seller_id = dicts['mch_id']  # 商戶號
            openid = dicts['openid']  # 用戶標識
            update_sql = ''' update weixin_trade set trade_status='{trade_status}', appid='{appid}', ''' + \
            '''seller_id='{seller_id}', openid='{openid}', total_amount='{total_amount}',''' +  \
            '''out_trade_no='{out_trade_no}', gmt_create='{gmt_create}', '''+ \
            '''device_info='{device_info}', trade_type='{trade_type}', bank_type='{bank_type}', ''' + \
            '''fee_type='{fee_type}', cash_fee='{cash_fee}' where trade_no='{trade_no}' '''
            update_sql = update_sql.format(
                trade_status=trade_status,
                appid=appid,
                seller_id=seller_id,
                openid=openid,
                total_amount=total_amount,
                out_trade_no=out_trade_no,
                gmt_create=gmt_create,
                device_info=device_info,
                trade_type=trade_type,
                bank_type=bank_type,
                fee_type=fee_type,
                cash_fee=cash_fee,
                trade_no=trade_no)
            print(update_sql)
            #寫數據庫
            
def weixin_rollback(request):
    """
    【API】: 微信寶支付結果回調接口,供微信服務端調用
    """
    try:
        # 支付異步回調驗證
        data = weixinpay_call_back(request)
        if data:
            print('微信支付返回====={0}'.format(data))
            res = "success"
            trade_status = data['result_code']  # 業務結果  SUCCESS/FAIL
            out_trade_no = data['out_trade_no']  # 商戶訂單號
            if trade_status == "SUCCESS":
                weixinpay_sucess_db(data)
                device_info = data['device_info']  # 微信支付分配的終端設備號
                # 如果狀態是支付成功則發放物品
                hall = KBEngine.globalData["Halls"]
                if hall:
                    player_data = hall.GetPlayerByDbId(int(device_info))
                    if player_data:
                        player = player_data.entityCall
                        if player:
                            print('微信發放獎品到客戶端,訂單號======%s' % out_trade_no)
                            player.GmBkCmd({'cmd':'PayReward','Order_id':out_trade_no})
                        else:
                            print('找不到玩家++++++++')
            else:
                res = "error: pay failed! "
                status = 0
                err_code = data['err_code']  # 錯誤代碼
                err_code_des = data['err_code_des']  # 錯誤代碼描述
        else:
            res = "error: verify failed! "
    except Exception as e:
        print(e)
        res='err:exception==='
    finally:
        return weixinpay_response_xml(res)
class WeChatPayNotify(tornado.web.RequestHandler):
    """微信支付回調"""
    def post(self):
        """
        【API】: 微信寶支付結果回調接口,供微信服務端調用
        """
        self.write(weixin_rollback(self.request))
class WeChatPay(tornado.web.RequestHandler):
    def post(self):
        to_client={}
        for k,v in self.request.arguments.items():
            to_client[k] = str(v[0],encoding='utf-8')
        pid = to_client.pop('pid')
        if isinstance(pid,str):
            pid = int(pid)
        self.write('')

posted on 2020-12-05 15:34 Benjamin 閱讀(333) 評論(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>
            欧美国产先锋| 亚洲精品一品区二品区三品区| 性8sex亚洲区入口| 国产精品久久久久9999高清 | 欧美一区二区三区免费视频| 亚洲午夜久久久| 亚洲欧美在线免费| 久久久夜色精品亚洲| 欧美激情女人20p| 日韩亚洲综合在线| 午夜精品久久久久久久男人的天堂 | 亚洲一区二区三区激情| 午夜伦欧美伦电影理论片| 久久久人成影片一区二区三区| 久久影音先锋| 欧美日韩精品一二三区| 国产日韩欧美日韩| 亚洲欧洲视频在线| 午夜精品一区二区三区在线视 | 欧美日韩在线播放| 国产一区二区三区四区在线观看| 亚洲人成网站在线观看播放| 亚洲女女女同性video| 巨乳诱惑日韩免费av| 91久久国产精品91久久性色| 亚洲啪啪91| 久久黄色级2电影| 欧美日韩国产在线播放| 在线观看免费视频综合| 亚洲综合导航| 亚洲春色另类小说| 欧美亚洲一区三区| 欧美视频在线观看| 日韩视频一区二区在线观看 | 亚洲女同同性videoxma| 欧美成人免费小视频| 久久久av网站| 欧美成人亚洲成人| 韩国av一区二区三区四区| 亚洲永久免费| 亚洲欧洲综合另类| 狂野欧美激情性xxxx欧美| 国产女主播在线一区二区| 一区二区欧美在线| 91久久综合| 农村妇女精品| 亚洲福利在线看| 久久噜噜噜精品国产亚洲综合| 一区二区三区你懂的| 欧美日韩精品在线播放| 久久国产精品久久精品国产| 亚洲视频在线看| 欧美黄污视频| 亚洲精品中文字幕女同| 欧美风情在线| 久久蜜桃av一区精品变态类天堂| 国产欧美丝祙| 欧美一区二区视频免费观看| 日韩午夜电影av| 欧美日韩免费在线| aa亚洲婷婷| 亚洲精品日韩在线| 欧美激情小视频| 日韩视频免费| 一区二区欧美日韩| 国产精品你懂的在线欣赏| 亚洲女人av| 校园春色综合网| 国内激情久久| 男人天堂欧美日韩| 麻豆久久精品| 99国产精品久久久久久久成人热 | 亚洲一本视频| 亚洲一区二区视频在线| 国产精品日本一区二区| 欧美一级网站| 欧美在线免费看| 在线观看91精品国产入口| 欧美成人在线影院| 欧美高清在线一区二区| 在线亚洲激情| 欧美在线|欧美| 最新热久久免费视频| 亚洲最新视频在线| 国产自产2019最新不卡| 亚洲第一福利视频| 欧美日韩在线三区| 久久蜜桃av一区精品变态类天堂| 老司机精品久久| 亚洲欧美日韩在线观看a三区| 久久精品视频在线播放| 亚洲小少妇裸体bbw| 久久精彩免费视频| 亚洲午夜精品一区二区| 久久久伊人欧美| 亚洲欧美国产毛片在线| 久久久国产精品一区二区中文| 亚洲欧洲在线播放| 午夜视频一区| 在线视频精品| 每日更新成人在线视频| 欧美一级黄色网| 欧美日韩国产综合视频在线| 久久久噜噜噜久久| 欧美日韩国产三级| 欧美成人日韩| 国外成人在线| 亚洲女人av| 亚洲一区二区av电影| 麻豆精品在线视频| 噜噜爱69成人精品| 久久免费精品视频| 欧美亚州一区二区三区 | 久久久蜜桃一区二区人| 亚洲午夜精品| 欧美啪啪成人vr| 欧美成人综合一区| 精品69视频一区二区三区| 亚洲最新视频在线播放| 日韩小视频在线观看| 久久久噜噜噜久久中文字免| 午夜日韩福利| 国产精品v欧美精品∨日韩| 亚洲狠狠丁香婷婷综合久久久| 尤物在线观看一区| 欧美在线在线| 久久手机精品视频| 国产日韩精品久久久| 亚洲一区二区三区高清 | 亚洲高清视频一区| 久久国产直播| 久久综合国产精品| 国内精品久久久久影院薰衣草| 亚洲影视在线| 欧美一区二区三区四区在线观看| 国产精品黄视频| 亚洲永久精品国产| 欧美在线啊v| 国产在线欧美| 麻豆精品一区二区综合av| 亚洲高清网站| 亚洲视频免费在线| 国产精品毛片a∨一区二区三区|国| 在线一区二区三区四区| 欧美一区二区三区男人的天堂| 国产农村妇女毛片精品久久莱园子| 亚洲影院污污.| 久久久噜噜噜久久人人看| 一区二区亚洲欧洲国产日韩| 久久久久久久高潮| 亚洲国产成人精品女人久久久 | 欧美在线观看日本一区| 久久精品视频播放| 在线看日韩av| 欧美精品久久久久久久| 一本色道精品久久一区二区三区| 亚洲影院色无极综合| 国产日韩欧美麻豆| 久久婷婷一区| 日韩亚洲国产精品| 欧美一区在线直播| 亚洲第一毛片| 欧美激情导航| 亚洲永久视频| 亚洲福利专区| 欧美一区二区视频在线观看2020 | 亚洲国产欧美国产综合一区| 欧美日韩a区| 欧美一区二区成人| 亚洲国产精品成人| 欧美一区三区三区高中清蜜桃| 欧美+日本+国产+在线a∨观看| 亚洲乱码一区二区| 国产精品美女主播| 媚黑女一区二区| 亚洲综合国产| 欧美激情一区二区| 先锋资源久久| 99在线视频精品| 一区二区三区在线看| 欧美特黄一区| 欧美国产日韩精品| 久久精品国产v日韩v亚洲 | 欧美伊人久久| 亚洲日本视频| 你懂的视频欧美| 久久se精品一区二区| 一本色道久久综合一区| 在线视频国内自拍亚洲视频| 国产精品视频999| 欧美伦理在线观看| 美女网站久久| 裸体一区二区| 久久综合中文色婷婷| 久久精品国产清高在天天线| 亚洲一区在线免费观看| 制服丝袜激情欧洲亚洲| 亚洲精品四区| 亚洲精品久久久久久下一站| 欧美福利视频在线|