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

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>
            欧美18av| 欧美xart系列在线观看| 亚洲欧美激情视频在线观看一区二区三区| 国产有码在线一区二区视频| 国产精品推荐精品| 国产精品私房写真福利视频| 国内成+人亚洲+欧美+综合在线| 国产午夜亚洲精品羞羞网站| 国外精品视频| 亚洲另类春色国产| 亚洲尤物在线| 久久午夜av| 亚洲三级国产| 激情久久五月天| 麻豆精品一区二区av白丝在线| 鲁大师影院一区二区三区| 欧美激情一二三区| 国产精品色婷婷久久58| 激情欧美一区| 亚洲图中文字幕| 久久综合久久综合久久| 亚洲精品久久久久久久久久久久久| 正在播放欧美视频| 久久精品免费电影| 欧美日韩精品一区二区三区| 国产一区二区久久| 在线中文字幕不卡| 麻豆国产精品777777在线| 日韩性生活视频| 久久久五月婷婷| 国产精品久久久久三级| 亚洲三级影院| 久久午夜视频| 亚洲影院色无极综合| 欧美激情精品久久久久久久变态 | 欧美一区二区三区在线| 久热爱精品视频线路一| 亚洲天堂av在线免费观看| 久久综合久久综合九色| 国产欧美日韩在线| 亚洲一区二区成人在线观看| 欧美福利一区二区| 性欧美大战久久久久久久免费观看| 欧美mv日韩mv国产网站app| 国产伦精品一区二区三区免费| 一区二区欧美视频| 亚洲成人在线网站| 久久久噜噜噜久久中文字免| 国产一二精品视频| 久久er精品视频| 亚洲男人的天堂在线观看| 欧美视频在线观看一区二区| 亚洲日本va在线观看| 欧美粗暴jizz性欧美20| 久久久久久久久久久久久9999| 国产视频久久久久| 久久爱www| 亚洲中无吗在线| 国产精品久久久久久久久搜平片| 日韩一二三区视频| 亚洲乱码一区二区| 欧美三级第一页| 亚洲欧美日韩国产一区二区三区| 日韩视频在线观看国产| 欧美另类高清视频在线| 日韩网站免费观看| 亚洲精选成人| 亚洲欧美影音先锋| 亚洲一区二区三区欧美| 欧美亚州一区二区三区| 亚洲自拍偷拍视频| 亚洲男人的天堂在线aⅴ视频| 国产精品亚洲不卡a| 亚洲欧美日韩一区二区三区在线| 一区二区免费看| 国产精品嫩草99av在线| 欧美一区二区三区喷汁尤物| 欧美一级久久久久久久大片| 国际精品欧美精品| 欧美激情视频一区二区三区免费| 欧美激情综合五月色丁香| 一本色道久久88综合亚洲精品ⅰ| 99热在这里有精品免费| 国产农村妇女毛片精品久久麻豆 | 国产日韩一区二区三区在线| 欧美一区=区| 久久久久久久久一区二区| 91久久精品国产91久久性色tv| 亚洲国产精品女人久久久| 欧美日韩国产精品一区| 欧美亚洲一级片| 另类av一区二区| 亚洲一区国产| 久久视频国产精品免费视频在线| 亚洲精品欧美激情| 亚洲欧美综合一区| 亚洲精品一级| 午夜精品久久久久久久99热浪潮| 亚洲国产一区二区三区在线播| 一区二区高清视频| 黄色日韩网站| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 麻豆精品国产91久久久久久| 欧美大片免费观看在线观看网站推荐| 亚洲综合好骚| 美日韩精品免费观看视频| 亚洲欧美另类在线观看| 久久中文字幕一区二区三区| 亚洲欧美不卡| 欧美精品www在线观看| 久久精品av麻豆的观看方式 | 亚洲欧美日韩天堂一区二区| 亚洲国产成人av在线| 亚洲男女自偷自拍| 一区二区av| 另类亚洲自拍| 久久综合九色综合欧美狠狠| 国产精品二区三区四区| 亚洲激情网站| 亚洲激情视频| 快播亚洲色图| 狼狼综合久久久久综合网| 久久精品中文字幕一区| 欧美亚洲第一区| 亚洲激情社区| 亚洲日本成人女熟在线观看| 久久免费高清| 卡一卡二国产精品| 狠狠久久五月精品中文字幕| 午夜精品久久久| 午夜一区二区三区不卡视频| 欧美日韩亚洲高清一区二区| 亚洲韩日在线| 亚洲精品免费看| 欧美精品一区在线播放| 亚洲第一精品福利| 最新中文字幕一区二区三区| 麻豆国产精品一区二区三区| 免费观看在线综合色| 在线日韩中文| 欧美成人免费在线观看| 亚洲电影在线| 在线亚洲欧美视频| 国产精品久久久久久影视| 亚洲欧美精品| 玖玖玖国产精品| 亚洲精品影视| 国产精品av一区二区| 亚洲私拍自拍| 久久久www| 亚洲国产精品成人一区二区| 蘑菇福利视频一区播放| 亚洲精品精选| 亚洲综合日韩在线| 国产亚洲精品美女| 乱中年女人伦av一区二区| 亚洲人精品午夜在线观看| 亚洲视频在线看| 国产欧美在线视频| 美女诱惑黄网站一区| 亚洲毛片网站| 久久久久久久综合色一本| 亚洲人成在线免费观看| 国产精品高潮呻吟视频| 久久久国产成人精品| 亚洲激情另类| 欧美在线日韩| 日韩午夜在线播放| 国产日产亚洲精品系列| 免费一级欧美片在线观看| 99亚洲一区二区| 蜜月aⅴ免费一区二区三区 | 国产精品夜夜嗨| 久久久久**毛片大全| 亚洲精品视频在线播放| 久久国产福利国产秒拍| 亚洲精品一区在线| 国产一区二区三区高清| 欧美黄色网络| 欧美有码视频| 一区二区三区精密机械公司| 久久久久久91香蕉国产| aⅴ色国产欧美| 极品少妇一区二区三区精品视频| 欧美区高清在线| 久久先锋资源| 亚洲欧美日韩国产精品| 亚洲精品久久久久| 欧美成人免费全部| 久久精彩视频| 亚洲欧美日韩另类精品一区二区三区 | 一区电影在线观看| 久久精品一级爱片| 亚洲特级毛片| 亚洲人体大胆视频| 永久免费精品影视网站| 国产精品免费观看视频| 欧美韩国日本综合| 久久欧美中文字幕| 欧美一区二区啪啪|