123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- package com.yc.education.controller;
- import com.wxpay.WxPayConfig;
- import com.wxpay.zhuanz.CertHttpUtil;
- import com.wxpay.zhuanz.WXPayUtil;
- import com.yc.education.model.Orders;
- import com.yc.education.model.Users;
- import com.yc.education.service.UsersService;
- import org.apache.http.client.config.RequestConfig;
- import org.apache.http.impl.client.CloseableHttpClient;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import javax.servlet.http.HttpServletRequest;
- import java.math.BigDecimal;
- import java.util.Map;
- import java.util.SortedMap;
- import java.util.TreeMap;
- import static com.wxpay.zhuanz.WXPayUtil.*;
- /**
- * @author caolong
- * @version 1.0.0
- * @Details
- * @ClassName WxTransferController
- * @Description TODO
- * @createTime 2019-07-23 09:29:00
- */
- @RestController
- @RequestMapping("/api")
- public class WxTransferController extends BaseController {
- public final static String SSLCERT_PATH = "/usr/local/java/zhengshu/apiclient_cert.p12";
- private static int socketTimeout = 10000;// 连接超时时间,默认10秒
- private static int connectTimeout = 30000;// 传输超时时间,默认30秒
- private static RequestConfig requestConfig;
- private static CloseableHttpClient httpClient;// HTTP请求器
- @Autowired
- private UsersService usersService;
- /**
- * @Title: transfer
- * @Description: 企业转账到零钱
- * @param:
- * @return:
- */
- // @RequestMapping("pay.html")
- public String transfer(HttpServletRequest request, Orders orders) {
- Integer userid = orders.getUserid();
- Users users = usersService.selectByKey(userid);
- // 1.0 拼凑企业支付需要的参数
- String appid = WxPayConfig.APPID; // 微信公众号的appid
- String mch_id = WxPayConfig.APPPAYMCH; // 商户号
- String nonce_str = generateNonceStr(); // 生成随机数
- String partner_trade_no = generateNonceStr(); // 生成商户订单号
- String openid = users.getOpenid(); // 支付给用户openid
- String check_name = "NO_CHECK"; // 是否验证真实姓名呢
- String re_user_name = users.getRzname(); // 收款用户姓名(非必须)
- String amount = orders.getPayforprice().multiply(new BigDecimal(100)).toString(); // 企业付款金额,最少为100,单位为分
- String desc = "赔付金额"; // 企业付款操作说明信息。必填。
- String spbill_create_ip = getRequestIp(request); // 用户的ip地址
- // 2.0 生成map集合
- SortedMap<String, String> packageParams = new TreeMap<String, String>();
- packageParams.put("mch_appid", appid); // 微信公众号的appid
- packageParams.put("mchid", mch_id); // 商务号
- packageParams.put("nonce_str", nonce_str); // 随机生成后数字,保证安全性
- packageParams.put("partner_trade_no", partner_trade_no); // 生成商户订单号
- packageParams.put("openid", openid); // 支付给用户openid
- packageParams.put("check_name", check_name); // 是否验证真实姓名呢
- packageParams.put("re_user_name", re_user_name);// 收款用户姓名
- packageParams.put("amount", amount); // 企业付款金额,单位为分
- packageParams.put("desc", desc); // 企业付款操作说明信息。必填。
- packageParams.put("spbill_create_ip", spbill_create_ip); // 调用接口的机器Ip地址
- try {
- // 3.0 利用上面的参数,先去生成自己的签名
- String sign = WXPayUtil.generateSignature(packageParams, WxPayConfig.APPPAYKEY);
- // 4.0 将签名再放回map中,它也是一个参数
- packageParams.put("sign", sign);
- // 5.0将当前的map结合转化成xml格式
- String xml = mapToXml(packageParams);
- // 6.0获取需要发送的url地址
- String wxUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; // 获取退款的api接口
- System.out.println("发送前的xml为:" + xml.toString());
- // 7,向微信发送请求转账请求
- String returnXml = CertHttpUtil.postData(wxUrl, xml);
- System.out.println("返回的returnXml为:" + returnXml);
- // 8,将微信返回的xml结果转成map格式
- Map<String, String> returnMap = xmlToMap(returnXml);
- if (returnMap.get("return_code").equals("SUCCESS")) {
- // 付款成功
- System.out.println("returnMap为:" + returnMap);
- }
- return returnXml;
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return "error";
- }
- /**
- * @Title: getRequestIp
- * @Description: 获取用户的ip地址
- * @param:
- * @return:
- */
- public static String getRequestIp(HttpServletRequest request) {
- String ip = request.getHeader("x-forwarded-for");
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getHeader("Proxy-Client-IP");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getHeader("WL-Proxy-Client-IP");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getRemoteAddr();
- }
- if (ip.indexOf(",") != -1) {
- String[] ips = ip.split(",");
- ip = ips[0].trim();
- }
- return ip;
- }
- }
|