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

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>
            国产伦精品一区二区三区高清版| 亚洲综合精品| 欧美 日韩 国产 一区| 久久婷婷av| 亚洲成人在线视频播放| 久久亚洲欧美| 欧美在线观看天堂一区二区三区| 欧美日韩在线第一页| 欧美一区二区三区在线观看| 老色鬼精品视频在线观看播放| 日韩一区二区免费看| 一区二区三区国产精品| 欧美韩日一区| 夜久久久久久| 午夜精品久久久久久久久久久久久 | 国产精品欧美一区二区三区奶水| 亚洲一区中文字幕在线观看| 亚洲欧美综合国产精品一区| 亚洲激情女人| 午夜精品理论片| 日韩一级黄色av| 久久一区二区三区国产精品| 亚洲一区二区三区视频| 亚洲一区999| 国产亚洲一区二区三区在线观看 | 欧美在线视频免费| 亚洲国产精品va在线看黑人动漫| 亚洲精品国久久99热| 欧美一区日韩一区| 久久精品在线播放| 99精品福利视频| 欧美在线免费看| 欧美综合激情网| 国产日产欧美a一级在线| 国产精品区一区二区三区| 国产精品成人久久久久| 久久国产精品亚洲va麻豆| 亚洲国产免费看| 午夜日韩电影| 美女性感视频久久久| 亚洲欧美日韩人成在线播放| 另类综合日韩欧美亚洲| 欧美久久一级| 久久不见久久见免费视频1| 这里是久久伊人| 久久国产毛片| 亚洲视频一区在线| 一区二区三区蜜桃网| 在线观看日韩www视频免费| 亚洲人体影院| 亚洲第一区在线| 新狼窝色av性久久久久久| 欧美日韩精品一区| 亚洲欧洲一区二区天堂久久| 99精品热视频| 国产亚洲成av人片在线观看桃| 欧美在线一二三区| 午夜精品一区二区在线观看| 99亚洲一区二区| 日韩视频精品在线观看| 亚洲国产精品t66y| 欧美日韩中国免费专区在线看| 亚洲曰本av电影| 亚洲精品视频在线看| 亚洲人体偷拍| 亚洲肉体裸体xxxx137| 国产日韩欧美日韩大片| 狠狠色2019综合网| 欧美成人激情在线| 一本一本久久a久久精品综合麻豆| 性欧美videos另类喷潮| 亚洲国产精品嫩草影院| 国产一区二区三区免费观看| 亚洲免费av片| 久久精品人人做人人综合| 久久亚洲精品欧美| 久久丁香综合五月国产三级网站| 艳妇臀荡乳欲伦亚洲一区| 亚洲国产欧美不卡在线观看| 亚洲一区二区三区在线视频| 欧美一区精品| 香蕉av777xxx色综合一区| 亚洲免费影院| 久久黄色影院| 先锋影音久久久| 欧美国产在线视频| 亚洲天堂久久| 欧美日韩视频在线第一区| 国产精品地址| 亚洲欧美影院| 欧美xart系列高清| 亚洲国产你懂的| 免费观看日韩| 国产欧美日韩一区二区三区| 久久久人成影片一区二区三区| 老司机精品视频一区二区三区| 蜜桃av一区二区三区| 免费欧美网站| 久久久人成影片一区二区三区观看 | 久久影视精品| 欧美一区二区视频观看视频| 欧美日韩在线三级| 亚洲国产免费看| 午夜欧美电影在线观看| 中国成人黄色视屏| 黄色精品网站| 欧美不卡视频| 欧美h视频在线| 亚洲人成久久| 欧美一站二站| 欧美激情在线狂野欧美精品| 久久疯狂做爰流白浆xx| 一区二区三区在线免费播放| 久久免费午夜影院| 日韩午夜视频在线观看| 亚洲第一精品电影| 国产综合色在线| 欧美一区91| 欧美精品在线观看播放| 午夜天堂精品久久久久| 欧美伦理视频网站| 亚洲国产欧美在线| 国产女主播一区二区| 欧美国产日韩xxxxx| 欧美色道久久88综合亚洲精品| 欧美亚洲综合在线| 欧美在线一二三四区| 亚洲一区二区三区在线观看视频| 欧美激情精品久久久久久| 午夜在线播放视频欧美| av成人免费| 久久国产黑丝| 午夜视频一区| 亚洲日本成人网| 欧美精选一区| 欧美二区视频| 欧美黄色影院| 亚洲香蕉在线观看| 国产精品社区| 亚洲天堂成人在线观看| 99精品国产福利在线观看免费| 美腿丝袜亚洲色图| 亚洲日本成人网| 欧美一区二区三区免费看| 欧美精品v日韩精品v国产精品| 午夜精品久久久久久久久久久久久| 午夜精品久久久久久久久久久久| 欧美在线观看视频| 欧美日韩一区二区视频在线| 99re热精品| 久久久亚洲国产美女国产盗摄| 午夜精品视频在线观看| 欧美日韩中文字幕日韩欧美| 亚洲国产高清视频| 亚洲靠逼com| 国产一本一道久久香蕉| 久久国产精品久久久| 欧美激情在线免费观看| 99re6热在线精品视频播放速度| 欧美sm视频| 亚洲女同精品视频| 欧美mv日韩mv国产网站app| 亚洲国产清纯| 国产精品女人毛片| 国产精品xxxav免费视频| 这里只有精品在线播放| 欧美 日韩 国产一区二区在线视频| 99成人在线| 在线精品视频在线观看高清| 国产欧美日韩视频一区二区三区| 久久频这里精品99香蕉| 亚洲激情偷拍| 久久精品理论片| 欧美电影在线| 亚洲国产精品女人久久久| 亚洲高清三级视频| 一本久道久久久| 久久综合伊人77777| 国产精品视频一二| 亚洲视频第一页| 欧美aⅴ99久久黑人专区| 久久成人这里只有精品| 在线成人小视频| 欧美在线视频播放| 国产真实精品久久二三区| 亚洲视频axxx| 一本色道88久久加勒比精品| 欧美日韩久久| 亚洲一区二区高清视频| 欧美一区二区三区日韩视频| 欧美14一18处毛片| 久久成人这里只有精品| 猛干欧美女孩| 一区二区三区四区国产| 亚洲欧美日韩国产精品 | 国产婷婷精品| 国产午夜精品在线| 一本色道久久99精品综合| 午夜精品福利一区二区三区av | 久久国产精品一区二区三区四区|