APP提现之微信商户号企业付款
来源:互联网 发布:淘宝产品参数如何设置 编辑:程序博客网 时间:2024/04/30 23:36
微信提供的体现API出了服务号红包之外,还有商户号的企业付款,详细的API文档参照https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1
企业付款直接把钱转到微信用户的零钱里,不需要用户手动领取,每笔的限额实名认证的为20000,非实名的为2000,使用比红包方便,但是它是收手续费的,收费比例为2%,
这部分收费是由用户支付,假如用户体现100元,商户号实际扣除100元,最后实际转入用户零钱的金额为98元,另外2元作为手续费,相对来说是一个比较高的比例(TX真黑)。
在微信开放平台中,一个APP如果开通了支付功能,会分配一个商户ID。同时这个APP会有一个appid,在appid和商户mch_id基础上就可以实现获取用户的体现。
APP内部绑定微信号
1 客户端通过微信AUTH获得微信的code发送给服务器,这个code是微信用户相对于APP的code。2 服务器通过code获取用户access_token和openid,参照https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html
APP内用户提现
如果用户提现金额大于2000,就需要用户发送真实姓名过来,发送给微信服务器进行实名认证。一个提现单有三种状态 ’SUCCESS‘、’FAILED‘、’PROCESSING‘,所以需要对于已经发出去的订单要定时查询,只有微信方返回’SUCCESS‘的时候才算提现成功,这时候才能执行app内部的逻辑。
服务号提现
服务号再申请的时候,也会有一个相对应的mchid,根据服务号的wxappid,以及mchid,参考以上APP步骤获取微信号相对于改服务号的openid就可以完成对该微信号的提现需求
部分代码如下
class WeixinWithdrawOrder_qiye(object): def __init__(self, withhdraw_id, openid, re_user_name, mch_billno, amount, way): from model.withdrawnew import Withdraw self.wid = withhdraw_id self.pw_tid = 0 if way == Withdraw.PLATFORM.WEIXINPAY_APP: self.mch_appid = config.WX_APPID self.mchid = config.WX_MCH_ID self.cert = ('data/weixin/app/apiclient_cert.pem', 'data/weixin/app/apiclient_key.pem') self.mch_key = config.WX_MCH_KEY elif way == Withdraw.PLATFORM.WEIXINPAY_WEB: self.mch_appid = config.WX_FWH_APPID self.mchid = config.WX_FWH_MCH_ID self.cert = ('data/weixin/fwh/apiclient_cert.pem', 'data/weixin/fwh/apiclient_key.pem') self.mch_key = config.WX_FWH_MCH_KEY self.nonce_str = hashlib.md5('%s-%s' % (self.wid, time.time())).hexdigest() self.partner_trade_no = mch_billno self.openid = openid if re_user_name: self.check_name = 'OPTION_CHECK' self.re_user_name = re_user_name else: self.check_name = 'NO_CHECK' self.amount = amount self.desc = '提现' self.spbill_create_ip = config.WX_PAY_IP_ADDR @classmethod def sign(cls, data): weixin_params = [] for key, value in data.iteritems(): if key not in ('wid', 'sign', 'pw_tid', 'cert', 'mch_key', ): weixin_params.append([str(key), str(value)]) weixin_params.sort(key=lambda x:x[0]) sign_src = '%s&key=%s' % ('&'.join(['%s=%s'%(x[0], x[1]) for x in weixin_params]), data['mch_key']) logging.info(sign_src) return hashlib.md5(sign_src).hexdigest().upper() def order(self): order_fmt = '''<xml> <mch_appid>%s</mch_appid> <mchid>%s</mchid> <nonce_str>%s</nonce_str> <partner_trade_no>%s</partner_trade_no> <openid>%s</openid> <check_name>%s</check_name> %s <amount>%s</amount> <desc>%s</desc> <spbill_create_ip>%s</spbill_create_ip> <sign>%s</sign></xml>''' arg_opt = '' if getattr(self, 're_user_name', None):arg_opt = '<re_user_name>%s</re_user_name>' % self.re_user_name order_arg = ( self.mch_appid, self.mchid, self.nonce_str, self.partner_trade_no, self.openid.encode('utf8'), self.check_name, arg_opt, self.amount, self.desc, self.spbill_create_ip, WeixinWithdrawOrder_qiye.sign(self.__dict__), ) return order_fmt % order_arg def run_withdraw(self): try: order = self.order() logging.info(order) url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers' cert = self.cert data = requests.post(url, data=order, cert=cert).text root = ElementTree.fromstring(data) response = {child.tag : child.text for child in root.getchildren()} logging.info(response) if response.get('return_code') == 'SUCCESS': if response.get('result_code') == 'SUCCESS': return True, response.get('partner_trade_no'), response.get('err_code'), response.get('return_msg') else: logging.error(data) return True, self.partner_trade_no, response.get('err_code'), response.get('return_msg') else: logging.error(data) return False, self.partner_trade_no, response.get('err_code'), response.get('return_msg') except: traceback.print_exc() return False, self.partner_trade_no, 'url not connect', 'url not connect'
0 0
- APP提现之微信商户号企业付款
- 微信支付商户平台,企业付款,企业向个人付款接口总结
- 微信企业付款报appid不属于该商户号
- 微信支付之企业付款
- 微信支付之企业付款
- 微信企业付款
- php 微信商户发红包,退款,订单查询,企业付款到零钱
- 微信商户平台企业付款到用户找不到没选项开通不了怎么开通
- 企业微信付款接口
- php微信企业付款
- java微信企业付款
- [分享] 微信支付中商户对个人用户付款案例
- 微信支付之公众号发红包和企业付款
- java开发微信公众号企业付款开发
- 微信公众号开启企业付款到用户
- java开发微信公众号企业付款开发
- 微信企业付款接口API
- 微信企业付款接口二三事
- 缓存区 NSData 与 NSMutableDate
- ASP、JSP、PHP 三种技术比较
- RxJava 浅显学习
- 拓扑排序:Kahn算法
- javase重新开始系列之log4j
- APP提现之微信商户号企业付款
- php常用函数
- c++ Array的使用方法
- 问题:U8的存货同步到本地时,报“数据库可能存在相同的编码”
- Linux上使用Qt Creator进行C/C++开发
- 桶排序
- 代码冲突常见解决方法
- 缓存
- js文件json解析,建数据表插入保存