精华内容
下载资源
问答
  • java 企业付款到零钱 微信提现功能讲解

    千次阅读 热门讨论 2018-08-10 21:18:06
    * 企业付款描述信息 理赔 企业付款操作说明信息 */ private String desc; /** * Ip地址 该IP同在商户平台设置的IP白名单中的IP没有关联,该IP可传用户端或者服务端的IP。 */ private String spbill_create_...

    附官方地址:

           微信官方api     微信公众号获取用户openid

    只讲容易遇到的坑

    微信api说明,请求需要双向证书。 所以需要去商户管理后台下载api证书  微信支付平台 

    在支付平台->账户中心->api安全 下载证书   并设置秘钥   

    然后在营销中心->支付后配置  查看发起提现公众号的appid  此appid一定要和获取用户openid的appid一致

    将上图这个id记住 这是商户号

    从微信支付平台中我们要下载证书,设置秘钥,确保appid一致,获取商户号

    api具体请求就不分析了 有文档  直接上代码

    package com.liuyb.model;
    
    /**
     * @Auther: liuyubo
     * @Date: 2018/8/10 20:30
     * @Description:实体类
     */
    public class EnterprisesPayment {
        /**
         * 商户账号appid
         * 申请商户号的appid或商户号绑定的appid
         */
        private String mch_appid;
    
        /**
         * 商户号 微信支付分配的商户号
         */
        private String mchid;
    
        /**
         *设备号013467007045764
         * 微信支付分配的终端设备号
         */
        private String device_info;
    
        /**
         * 随机字符串	5K8264ILTKCH16CQ2502SI8ZNMTM67VS
         * 随机字符串,不长于32位
         */
        private String nonce_str;
    
        /**
         * 签名	C380BEC2BFD727A4B6845133519F3AD6
         */
        private String sign;
    
        /**
         *商户订单号  商户订单号,需保持唯一性(只能是字母或者数字,不能包含有符号)
         */
        private String partner_trade_no;
    
        /**
         *用户openid  商户appid下,某用户的openid
         */
        private String openid;
    
        /**
         * 校验用户姓名选项	 不校验真实姓名 NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名
         *
         */
        private String check_name;
    
        /**
         * 收款用户姓名		收款用户真实姓名。 如果check_name设置为FORCE_CHECK,则必填用户真实姓名
         */
        private String re_user_name;
    
        /**
         * 金额	 企业付款金额,单位为分
         */
        private Integer amount;
    
        /**
         * 企业付款描述信息	理赔	企业付款操作说明信息
         */
        private String desc;
    
        /**
         * Ip地址	该IP同在商户平台设置的IP白名单中的IP没有关联,该IP可传用户端或者服务端的IP。
         */
        private String spbill_create_ip;
    
    
    
        public String getMch_appid() {
            return mch_appid;
        }
    
        public void setMch_appid(String mch_appid) {
            this.mch_appid = mch_appid;
        }
    
        public String getDevice_info() {
            return device_info;
        }
    
        public void setDevice_info(String device_info) {
            this.device_info = device_info;
        }
    
        public String getNonce_str() {
            return nonce_str;
        }
    
        public void setNonce_str(String nonce_str) {
            this.nonce_str = nonce_str;
        }
    
        public String getSign() {
            return sign;
        }
    
        public void setSign(String sign) {
            this.sign = sign;
        }
    
        public String getPartner_trade_no() {
            return partner_trade_no;
        }
    
        public void setPartner_trade_no(String partner_trade_no) {
            this.partner_trade_no = partner_trade_no;
        }
    
        public String getOpenid() {
            return openid;
        }
    
        public void setOpenid(String openid) {
            this.openid = openid;
        }
    
        public String getCheck_name() {
            return check_name;
        }
    
        public void setCheck_name(String check_name) {
            this.check_name = check_name;
        }
    
        public String getRe_user_name() {
            return re_user_name;
        }
    
        public void setRe_user_name(String re_user_name) {
            this.re_user_name = re_user_name;
        }
    
        public Integer getAmount() {
            return amount;
        }
    
        public void setAmount(Integer amount) {
            this.amount = amount;
        }
    
        public String getDesc() {
            return desc;
        }
    
        public void setDesc(String desc) {
            this.desc = desc;
        }
    
        public String getSpbill_create_ip() {
            return spbill_create_ip;
        }
    
        public void setSpbill_create_ip(String spbill_create_ip) {
            this.spbill_create_ip = spbill_create_ip;
        }
    
        public String getMchid() {
            return mchid;
        }
    
        public void setMchid(String mchid) {
            this.mchid = mchid;
        }
    }
    
    package com.liuyb.util;
    
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.security.KeyStore;
    
    import javax.net.ssl.SSLContext;
    
    import org.apache.http.HttpEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.conn.ssl.SSLContexts;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    
    /**
     * @Auther: liuyubo
     * @Date: 2018/8/10 20:39
     * @Description: 加载证书 发送请求
     */
    public class ClientCustomSSL {
    
        public static String doRefund(String url,String xmlData) throws Exception {
            KeyStore keyStore = KeyStore.getInstance("PKCS12");
            FileInputStream instream = new FileInputStream(new File(""));//P12文件目录  写证书的项目路径
            try {
                keyStore.load(instream, "xxxx".toCharArray());//这里写密码..默认是你的MCHID 证书密码
            } finally {
                instream.close();
            }
    
    
            SSLContext sslcontext = SSLContexts.custom()
                    .loadKeyMaterial(keyStore, "xxxx".toCharArray())//这里也是写密码的
                    .build();
    
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                    sslcontext,
                    new String[] { "TLSv1" },
                    null,
                    SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
            CloseableHttpClient httpclient = HttpClients.custom()
                    .setSSLSocketFactory(sslsf)
                    .build();
            try {
                HttpPost httpost = new HttpPost(url); // 设置响应头信息
                httpost.addHeader("Connection", "keep-alive");
                httpost.addHeader("Accept", "*/*");
                httpost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
                httpost.addHeader("Host", "api.mch.weixin.qq.com");
                httpost.addHeader("X-Requested-With", "XMLHttpRequest");
                httpost.addHeader("Cache-Control", "max-age=0");
                httpost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
                httpost.setEntity(new StringEntity(data, "UTF-8"));
                CloseableHttpResponse response = httpclient.execute(httpost);
                try {
                    HttpEntity entity = response.getEntity();
    
                    String returnMessage = EntityUtils.toString(response.getEntity(), "UTF-8");
                    EntityUtils.consume(entity);
                    return returnMessage; //返回后自己解析结果
                } finally {
                    response.close();
                }
            } finally {
                httpclient.close();
            }
        }
    
    }
    
    
    /**
     * @Auther: liuyubo
     * @Date: 2018/8/10 20:46
     * @Description: 微信提现 xml数据 签名等
     */
    public class WeixinpayUtil {
    
    
        private static final Logger LOG = Logger.getLogger(WeixinpayUtil.class);
    
    
    
        public static String createDocumentForEnterprisesPayment(EnterprisesPayment enterprisesPayment) {
            final StringBuffer result = new StringBuffer();
            result.append("<?xml version='1.0' encoding='UTF-8' standalone='yes' ?><xml>");
            result.append("<mch_appid>" + enterprisesPayment.getMch_appid() + "</mch_appid>");
            result.append("<mchid>" + enterprisesPayment.getMchid() + "</mchid>");
            result.append("<nonce_str>" + enterprisesPayment.getNonce_str() + "</nonce_str>");
            result.append("<partner_trade_no>" + enterprisesPayment.getPartner_trade_no() + "</partner_trade_no>");
            result.append("<openid>" + enterprisesPayment.getOpenid() + "</openid>");
            result.append("<check_name>" + enterprisesPayment.getCheck_name() + "</check_name>");
            result.append("<re_user_name>" + enterprisesPayment.getRe_user_name() + "</re_user_name>");
            result.append("<amount>" +enterprisesPayment.getAmount()+ "</amount>");
            result.append("<desc>" + enterprisesPayment.getDesc() + "</desc>");
            result.append("<spbill_create_ip>" + enterprisesPayment.getSpbill_create_ip() + "</spbill_create_ip>");
            result.append("<sign>" + enterprisesPayment.getSign() + "</sign>");
            result.append("</xml>");
            return result.toString();
        }
    
        
    
    
        public static String getSignCode(Map<String, String> map,String keyValue) {
            String result = "";
            try {
                List<Map.Entry<String, String>> infoIds = new ArrayList<Map.Entry<String, String>>(map.entrySet());
                // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
                Collections.sort(infoIds, new Comparator<Map.Entry<String, String>>() {
    
                    public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
                        return (o1.getKey()).toString().compareTo(o2.getKey());
                    }
                });
    
                // 构造签名键值对的格式
                StringBuilder sb = new StringBuilder();
                for (Map.Entry<String, String> item : infoIds) {
                    if (item.getKey() != null || item.getKey() != "") {
                        String key = item.getKey();
                        String val = item.getValue();
                        if (!(val == "" || val == null)) {
                            sb.append(key + "=" + val + "&");
                        }
                    }
    
                }
                sb.append("key="+keyValue);
                result = sb.toString();
    
                //进行MD5加密
                result = WeixinpayUtil.md5(result).toUpperCase();
            } catch (Exception e) {
                return null;
            }
            return result;
        }
    
        /**
         * 生成32位编码
         * @return string
         */
        public static String getUUID(){
            String uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
            return uuid;
        }
    
        /**
         *  生成提现订单号
         * @return string
         */
        public static String getOrderId() {
            int machineId = 1;//最大支持1-9个集群机器部署
            int hashCodeV = UUID.randomUUID().toString().hashCode();
            if(hashCodeV < 0) {//有可能是负数
                hashCodeV = - hashCodeV;
            }
            return machineId+String.format("%015d", hashCodeV);
        }
    
        /**
         *  md5加密
         * @param text
         * @return
         */
        public static String md5(final String text) {
           //自己写一个md5方法 这里我就不写了  记得大写
            return Md5Encrypt.md5(text).toUpperCase();
    
        }
    
    
    }
    
    /**
     * @Auther: liuyubo
     * @Date: 2018/8/10 20:59
     * @Description: test
     */
    public class Test {
    
       private SortedMap<String,String> sortedMap = new TreeMap<>();
    
        public static void main(String[] args) {
    
            String sginCode = getSgin(openid,amount);//获取用户openid 和 用户要提现的金额  拿到签名
            EnterprisesPayment enterprisesPayment  = addEnterprisesPayment(openid,amount,sginCode);//拿到签名后加密得到要发送到对象数据
            String enterprisesPaymentXML = WeixinpayUtil.createDocumentForEnterprisesPayment(enterprisesPayment);
  //封装xml 数据发送
            String returnXmlData =
  ClientCustomSSL.doRefund("url地址",enterprisesPaymentXML);

    
    
        }
    
    
        public EnterprisesPayment addEnterprisesPayment(String openid, Integer amount,String sginCode){

            EnterprisesPayment enterprisesPayment = new EnterprisesPayment();

            enterprisesPayment.setMch_appid("appid");//商户号appid

            enterprisesPayment.setMchid("商户号");//商户号

            // enterprisesPayment.setDevice_info(null);//设备号 非必填

            enterprisesPayment.setNonce_str(sortedMap.get("nonce_str"));//随机字符串

            enterprisesPayment.setSign(sginCode);//签名

            enterprisesPayment.setPartner_trade_no(sortedMap.get("partner_trade_no"));//商户订单号

            enterprisesPayment.setOpenid(openid);
    
            enterprisesPayment.setCheck_name("NO_CHECK");

            enterprisesPayment.setRe_user_name(null); 根据checkName字段判断是否需要

            enterprisesPayment.setAmount(amount);//金额

            enterprisesPayment.setDesc("desc");//描述

            enterprisesPayment.setSpbill_create_ip("ip");//ip地址

            return enterprisesPayment;

        }
    
        


public String getSgin(String openid, Integer amount) {

            sortedMap.put("mch_appid","appid");

            sortedMap.put("mchid","商户号");

            sortedMap.put("nonce_str", WeixinpayUtil.getUUID());

            sortedMap.put("partner_trade_no", WeixinpayUtil.getOrderId());

            sortedMap.put("openid", openid);

            sortedMap.put("check_name", "NO_CHECK");

            sortedMap.put("amount", amount.toString());

            sortedMap.put("desc", "desc");

            sortedMap.put("spbill_create_ip", "ip");

            sortedMap.put("re_user_name", "null");

            return WeixinpayUtil.getSignCode(sortedMap,"api秘钥");

        }
    }

    具体就这些吧 不懂到来问我 q群 8028492

    展开全文
  • 简介企业付款提供由商户直接付钱至用户微信零钱的能力,支持平台操作及接口调用两种方式。具有免费、快速到账、灵活、安全等优点。商户可以使用企业付款,用于如:费用报销、员工福利、用户奖励等。...

    6a7f33f965a7f757e6e0b7f881861ee1.png

    未开通

    开通条件:入账方式为即时入账至商户号,结算周期为T+1的商户,需满足三个条件:

    1)入驻满90天,

    2)连续正常交易30天,

    3)保持正常健康交易

    33ca147a37472c8e693a50676cdc2387.png

    其余结算周期的商户无90天/30天开通限制,但仍需保持正常健康交易。

    简介
    企业付款提供由商户直接付钱至用户微信零钱的能力,支持平台操作及接口调用两种方式。具有免费、快速到账、灵活、安全等优点。商户可以使用企业付款,用于如:费用报销、员工福利、用户奖励等

    这里用户奖励,就是可以用来分销发放分销商


    特点
    免费:不收取付款手续费,节省企业成本。
    灵活:可通过页面或接口发起付款,灵活满足企业不同场景的付款需求。
    友好:通过openid即可实现付款,用户授权即可,体验更好。
    快速:在发起后,及时到账用户零钱。通过微信消息触达,用户及时获知入账详情。
    安全:提供多种安全工具,满足不同场景安全需求。如:按需调整付款额度;支持收款账户限制;支持安全防刷,拦截恶意用户、小号、机器号码;支持自定义大额通知等。

    示例
    用户收到企业付款

    69e2299579e7ef82fa3760f74ff5ee4e.png

    88f23b47655194d6fbcc7557bee7e248.png
    展开全文
  • 首先,科普一下什么是企业付款到零钱企业付款到零钱顾名思义就是企业商户号里面的资金直接付款到用户个人零钱里。这个是商家做营销活动的必要工具。营销活动返现,配送员提现,分销返佣等都需要用到。但是很多朋友...

    首先,科普一下什么是企业付款到零钱,企业付款到零钱顾名思义就是企业商户号里面的资金直接付款到用户个人零钱里。这个是商家做营销活动的必要工具。营销活动返现,配送员提现,分销返佣等都需要用到。但是很多朋友相信都有过相同的感受就是辛辛苦苦认证完公众号,也花了大价钱买了营销系统。到最后却发现没有企业付款到零钱这个借口。少了这个功能没办法用。这就很尴尬了。

    此时就有两种方法去开通这个功能

    1,老老实实的按照要求养号。商户号入驻满90天;连续交易30天,中间不能中断;健康交易;

    要说这种方式其实也可以,如果系统不是特别着急上线的话等等也无妨。健康交易这个判定标准是相当可怕的了。好不容易按照要求做完了,最后提示下面这个(如图)

    adb059d2aab6e78151568c2b54dc3b3b.png

    2,我不想等那么长时间,有没有办法快速开通呢?

    当然是有的,找专门的人帮你去操作。专业的事情交给专业的人去做,永远都是对的。

    强制开通H5支付企业付款到零钱&微信红包功能需要专们的技术操作,请与微1383812),6196沟通了解

    不仅可以节省时间,更重要的是能帮我们解决大问题。H5支付,app支付。企业付款到零钱&现金红包都可以操作

    ed1509e60293c9f26424ac53fb486fa4.png

    企业付款到零钱几个注意要点

    不支持给非实名用户打款

    给同一个实名用户付款,单笔单日限额2W/2W

    一个商户同一日付款总额限额100W

    注意:以上规则中的限额2w、100w由于计算规则与风控策略的关系,不是完全精确值,金额仅做参考,请不要依赖此金额做系统处理,应以接口实际返回和查询结果为准,请知晓。

    针对付款的目标用户,提供可校验真实姓名的功能

    已付款的记录,企业可通过企业付款查询查看相应数据,或者查询商户号资金流水。

    默认每天最多可向同一个用户付款10次,可以在商户平台--API安全进行设置

    付款金额必须小于或等于商户当前可用余额的金额;

    展开全文
  • JAVA微信企业付款到零钱(十分钟搞定),最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信企业付款到零钱的开发过程,主要就是按规则封装好请求参数调用微信接口,涉及一些签名...

    JAVA微信企业付款到零钱(十分钟搞定),

    最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信企业付款到零钱的开发过程,

    主要就是按规则封装好请求参数调用微信接口,涉及一些签名校验;

    A.接口流程

    1. 获取用户OPENID ,不同用户在不同公众号下的OPENID都是唯一的, 这里主要讲企业付款到零钱,已经实现微信获取用户信息的骚年可以跳过这一步

    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140839

    2. 参数签名,需要将参数签名传递到微信企业付款接口,如果之前有实现其他微信接口,可以复用原来签名方法

    https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=4_3

    3. 调用企业付款接口

    https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2

    B.前置条件

    1. 已开通微信应用(服务号或者小程序),主要用到APPID+OPENID

    2. 已开通微信商户,并且开通企业付款到零钱,主要用到商户号+商户秘钥+商户证书

    C.代码实现:

    核心代码就是下面这个方法,其实把需要的参数准备好后逻辑就很简单了,实现的就是开发流程中定义的几个步骤;

    D.最终效果

    代码我打了个压缩包,有兴趣的骚年可以自己下载到本地,项目可以直接跑起来,需要把参数根据自己的实际情况进行配置;

    另外就是收款账户要记得要关注APPID对应的微信公众号,这样就可以实现实时到账,希望可以给大家一点帮助 : )

    --企业付款DEMO下载--   提取码: t4wx

    http://www.dengb.com/Javabc/1362736.htmlwww.dengb.comtruehttp://www.dengb.com/Javabc/1362736.htmlTechArticleJAVA微信企业付款到零钱(十分钟搞定), 最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信企业...

    展开全文
  • 1.功能介绍简介 企业付款提供由商户直接付钱至用户微信零钱的能力,支持平台操作及接口调用两种方式。具有免费、快速到账、灵活、安全等优点。商户可以使用企业付款,用于如:费用报销、员工福利、用户奖励等。特点...
  • java微信支付到零钱demo,即小例子,只要设置自己的相关参数即可完成支付,方便省时省事,嵌入自己的项目即可,大大提高开发效率。
  • 常见错误参考 https://blog.csdn.net/a584257442/article/details/86318725 完整demo,及常见错误参考 https://www.jianshu.com/p/8befe6dfe22c
  • 最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信企业付款到零钱的开发过程,主要就是按规则封装好请求参数调用微信接口,涉及一些签名校验;A.接口流程1. 获取用户OPENID ,...
  • 什么是企业付款到零钱企业付款提供由商户直接付钱至用户微信零钱的能力,支持平台操作及接口调用两种方式。具有免费、快速到账、灵活、安全等优点。商户可以使用企业付款,用于如:费用报销、员工福利、用户奖励等。...
  • 最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,记录一下微信企业付款到零钱的开发过程; A.前置条件 已开通微信应用(服务号或者小程序),主要用到APPID+OPENID 已开通微信商户,并且开通...
  • 微信企业付款到零钱实战操作指南,包含了一部分代码,如有不清楚的,可以联系我。远程解决问题,需要微信企业付款到零钱php版本的,也可以联系我。
  • 项目可以直接跑起来,需要把参数根据自己的实际情况进行配置,有疑问欢迎交流QQ:2172931891 CSDN现在不能设置免积分下载了, 需要的朋友也可以直接百度网盘获取 : https://pan.baidu.com/s/1KpIBAKMqjX54ogXCC3Q_Hg
  • WxService.java: package com.lws.test.core.wechat; import com.ygxk.social.core.utils.MD5Util; import com.ygxk.social.core.utils.StringUtil; import com.ygxk.social.core.wechat.WxKeyConstant; import ...
  • Java微信小程序接入企业付款到零钱

    千次阅读 2019-05-29 21:01:55
    企业付款到零钱的功能的开通资格可以在微信商户平台上看到。 简单来说就是在商户平台 - 运营工具 中可以看到如上图所示工具模块即可开通。 开通条件就是刷够流水,连续30天在该商户平台上有过交易记录即可。 ...
  • 很多朋友都说,为什么我想要开通企业付款到零钱这个功能怎么这么困难,今天小编就结合自己的一些经验向大家分享一下。企业付款到零钱:顾名思义就是企业商户号里面的资金直接付款到用户个人零钱里。这个是商家做营销...
  • https://blog.csdn.net/daotiao0199/article/details/85319451?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-6&utm_source=distribute.pc_relevant.none-task-blog-BlogComm...
  • 微信企业付款到零钱Java版)

    千次阅读 2019-12-16 10:14:30
    1.开通条件。 ...随后在微信商户平台 - 产品管理自动开启,...1.微信企业付款到零钱官方接口文档: https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1 2.微信公众号网页授权获取openID: ...
  • 原标题:微信小程序怎么提现到零钱?具体开通步骤如何?微信作为一款国民级别的社交应用,正在不断影响着我们生活的方方面面,而微信小程序作为微信的一大主要玩法,自然也十分受商家们的青睐,许多商家借助小程序...
  • #appid() wx.appid= #商户id wx.mch_id= #支付回调地址 wx.notify_url=https://ip**/***/json/wxpay/succes #是否检测实名 wx.check_name=NO_CHECK #微信支付API秘钥 wx.api_key= #微信企业付款证书地址 ...
  • 微信作为一款国民级别的社交应用,...又是提现到零钱的?下面让晴网小编就来详细为大家说说吧!一、开通小程序商城步骤1.注册微信小程序和微信支付商户号首先大家要访问https://mp.weixin.qq.com/扫码登录微信公众号,...

空空如也

空空如也

1 2 3 4
收藏数 66
精华内容 26
关键字:

java企业付款到零钱

java 订阅