微信提现(2)----企业付款到零钱

1、大部分步骤跟现金红包一样,不一样的地方如下:


package com.wp.index.user;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.KeyStore;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;


import javax.net.ssl.SSLContext;


import org.apache.commons.lang3.StringUtils;
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;


import com.jfinal.core.Controller;
import com.jfinal.kit.PropKit;
import com.jfinal.kit.StrKit;
import com.jfinal.weixin.sdk.kit.IpKit;
import com.jfinal.weixin.sdk.kit.PaymentKit;
import com.jfinal.weixin.sdk.utils.JsonUtils;
import com.wp.common.model.Member;




public class WeixinCompanyPayController extends Controller {

// 商户相关资料
private static String appid = PropKit.get("appid");
private static String partner = PropKit.get("partner");
private static String paternerKey = PropKit.get("paternerKey");
private static String redPack = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";//企业付款到零钱接口

/**
* 公众号支付js-sdk(公众号的微信支付)
*/
public void ajaxCompanyPay() {


String id = getCookie(Member.USER_LOGIN_ID_COOKIE);
if (StringUtils.isEmpty(id)) {
renderText("参数错误");
return;
}
Member m = Member.dao.findById(Long.parseLong(id));
if (m == null) {
renderText("参数错误");
return;
}


// openId,采用 网页授权获取 access_token API:SnsAccessTokenApi获取
String openId = m.getOpenId();
//生成订单号
String mchBillNo = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
//用户电脑ip
String ip = IpKit.getRealIp(getRequest());
if (StrKit.isBlank(ip)) {
ip = "127.0.0.1";
}


// 发普通红包接口文档:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3


Map<String, String> params = new HashMap<String, String>();
params.put("mch_appid", appid);//公众号appid
params.put("mchid", partner);//商户号
params.put("nonce_str", UUID.randomUUID().toString().replaceAll("-", ""));//随机字符串
params.put("partner_trade_no", mchBillNo);// 商户订单号
params.put("openid", openId);//用户公众号唯一识别
params.put("check_name", "FORCE_CHECK");//校验用户姓名选项。NO_CHECK:不校验真实姓名;FORCE_CHECK:强校验真实姓名
params.put("re_user_name", m.getName());//收款用户姓名。当check_name为FORCE_CHECK的时候必填
params.put("amount", "100");// 因为微信的amount的单位是分,所有需要乘以100
params.put("desc", "提现"); //企业付款描述信息
params.put("spbill_create_ip", ip);// Ip地址

String sign = PaymentKit.createSign(params, paternerKey);
params.put("sign", sign);

String xml = PaymentKit.toXml(params);//得到签名之后的xml


String xmlResult = ssl(redPack,xml);//HttpUtils.post(redPack, xml);


System.out.println(xmlResult);
Map<String, String> result = PaymentKit.xmlToMap(xmlResult);


String return_code = result.get("return_code");
String return_msg = result.get("return_msg");
if (StrKit.isBlank(return_code) || !"SUCCESS".equals(return_code)) {
renderText(return_msg);
return;
}
String result_code = result.get("result_code");
if (StrKit.isBlank(result_code) || !"SUCCESS".equals(result_code)) {
renderText(return_msg);
return;
}

String jsonStr = JsonUtils.toJson(result);
renderText(jsonStr);
}

private String ssl(String url,String data){
        StringBuffer message = new StringBuffer();
        try {
            KeyStore keyStore  = KeyStore.getInstance("PKCS12");
            FileInputStream instream = new FileInputStream(new File("E:/cert/apiclient_cert.p12"));
            keyStore.load(instream, partner.toCharArray());
         // Trust own CA and all self-signed certs
            SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, partner.toCharArray()).build();
            
            
            // Allow TLSv1 protocol only
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
            CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
            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"));
            System.out.println("executing request" + httpost.getRequestLine());


            CloseableHttpResponse response = httpclient.execute(httpost);
            try {
                HttpEntity entity = response.getEntity();


                System.out.println("----------------------------------------");
                System.out.println(response.getStatusLine());
                if (entity != null) {
                    System.out.println("Response content length: " + entity.getContentLength());
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(entity.getContent(),"UTF-8"));
                    String text;
                    while ((text = bufferedReader.readLine()) != null) {
                        message.append(text);
                    }


                }
                EntityUtils.consume(entity);
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                response.close();
            }
        } catch (Exception e1) {
            e1.printStackTrace();
        } 


        return message.toString();
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值