zoukankan      html  css  js  c++  java
  • 微信商户转帐到个人零钱

    import hashlib,requests,xmltodict
    
    from random import Random
    
    from app import app
    
    
    pay_url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"
    
    def sign(key, params):
        # 字典序排序
        data = "&".join(['%s=%s' % (key, params[key]) for key in sorted(params)])
        # 拼接sign
        data = '%s&key=%s' % (data, key)
        # MD5加密, 所有字符转为大写
        return hashlib.md5(data.encode('utf-8')).hexdigest().upper()
    
    def dict_to_xml(data, cdata=True, encoding='utf-8'):
        """ dict转xml """
        tag = '<{0}><![CDATA[{1}]]></{0}>' if cdata else '<{0}>{1}</{0}>'
        s = ''.join(tag.format(k, v) for k, v in data.items())
        return '<xml>{}</xml>'.format(s).encode(encoding)
    
    def xml_to_dict(content):
        """ xml转dict """
        data = xmltodict.parse(content).get('xml')
        if '#text' in data:
            del data['#text']
        return data
    
    def random_str():
        """
        生成32位随机字符串
        """
        chars = 'abcdefghijklmnopqrstuvwxyz0123456789'
        random = Random()
        return "".join([chars[random.randint(0, len(chars) - 1)] for i in range(32)])
    
    
    def wechat_transfer(openid, amount, order_id,desc= "测试商户支付",ip = None):
        """企业付款到个人余额接口"""
        data = {
            "mch_appid": app.config['WX_APPID'],  # 应用id
            "mchid": app.config['WX_MCHID'],      # 商户号
            "openid": openid,                     # 用户openid
            "partner_trade_no": order_id,         # 订单号
            "amount": amount,                     # 支付金额
            "check_name": "NO_CHECK",             # 用户真实姓名
            "nonce_str": random_str(),            # 生成随机字符串
            "desc": desc,                         # 备注,付款描述
            "spbill_create_ip":ip                 # 用户ip
        }
        # 拼接签名
        data["sign"] = sign(app.config["WX_API_KEY"],data)
        # 转换格式
        data_xml = dict_to_xml(data)
        # 加载证书
        cert = (app.config["WXPAY_CLIENT_CERT_PATH"], app.config["WXPAY_CLIENT_KEY_PATH"])
        # 发起支付
        result = requests.post(pay_url,data=data_xml,cert=cert)
    
        return xml_to_dict(result.text)
    if __name__ == '__main__':
    
        # 金额单位是分   1*100 是 1块钱
        ret = wechat_transfer("oLQdA5epndNHw4-RlCKEqIMPYEqE",1*100,"356352036536563269")
    
    
        if ret and ret["return_code"] == "SUCCESS":
            if ret["result_code"] == "SUCCESS":
                print('付款成功')
      
    

      

  • 相关阅读:
    诺基亚N900聊QQ的三种方法 狼人:
    VirtualBox安装MeeGo系统黑屏问题处理 狼人:
    android 使用SurfaceView实现小球高处落下并弹起的效果
    【科研论文】新型脉冲电子围栏网络化系统设计
    centos6 yum安装nginx、phpfpm
    windows phone:动画(二)
    Logical Architecture
    xtrabackup全备方案,备份恢复全过程记录
    在Oracle中恢复被DROP掉的表
    JadePool应用范例:创建China软件项目
  • 原文地址:https://www.cnblogs.com/zhoulangshunxinyangfan/p/14292845.html
Copyright © 2011-2022 走看看