微信小程序> 微信小程序支付(基于Java实现微信JSAPI支付):支付,提现,退款

微信小程序支付(基于Java实现微信JSAPI支付):支付,提现,退款

浏览量:641 时间: 来源:weixin_38168590
  • 添加WXpayCommon类用以具体实现相关功能
小程序小程序
  1 package com.karat.cn.wxCommon;  2   3 import java.io.IOException;  4 import java.util.HashMap;  5 import java.util.Map;  6   7 import com.karat.cn.util.WXPay;  8 import com.karat.cn.util.WXPayConfigImpl;  9 import com.karat.cn.util.WXPayConstants; 10 import com.karat.cn.util.WXPayUtil; 11 import com.karat.cn.vo.VoUnifiedOrderWx; 12  13 /** 14  * 支付,提现,退款 15  * @author 开发 16  * 17  */ 18 public class WXpayCommon { 19      20     private static WXPay wxpay; 21     private static WXPayConfigImpl config; 22      23      24     public static void WXpayCommonIns() throws Exception { 25         config = WXPayConfigImpl.getInstance(); 26         wxpay = new WXPay(config); 27     } 28      29     /** 30      * 支付 31      * @param orderInfo 自己数据库生成的订单 32      * @param openid    用户的标识openId 33      * @param ip         34      * @param flag 35      * @return 36      * @throws IOException 37      */ 38     public static VoUnifiedOrderWx payOrderWx(WxWithdrawOrder orderInfo, String openid, String ip, boolean flag) throws IOException { 39         VoUnifiedOrderWx voUnifiedOrderWx = null; 40         try { 41             MapString, String respData = null; 42             if (flag) { 43                 HashMapString, String data = new HashMapString, String(); 44                 data.put("body", orderInfo.getOrderNo()); 45                 data.put("out_trade_no", orderInfo.getOrderNo());//订单号 46                 data.put("fee_type", "CNY"); 47                 data.put("total_fee", "1");//支付金额(分) 48                 data.put("spbill_create_ip", ip); 49                 data.put("notify_url", "******************");//支付成功回调地址 50                 // 交易类型--JSAPI:公众号支付、NATIVE:原生扫码支付、APP:APP支付 51                 // 公众号支付 52                 data.put("trade_type", "JSAPI");//支付方式 53                 // 设备号--自定义参数,可以为终端设备号(门店号或收银设备ID),PC网页或公众号内支付可以传"WEB" 54                 data.put("device_info", "WEB"); 55                 // 用户openid 56                 data.put("openid", openid); 57                 data.put("product_id", "1000" + ""); 58                  59                 if (null == wxpay) { 60                     WXpayCommonIns(); 61                 } 62                 respData = wxpay.unifiedOrder(data);//统一下单 63                 orderInfo.setRemark(respData); 64             } else { 65                 respData = orderInfo.getRemark(); 66             } 67             System.out.println(respData); 68             // 返回状态码 69             String return_code = respData.get("return_code"); 70             if (return_code.equals(WXPayConstants.SUCCESS)) { 71                 // 业务结果 72                 String result_code = respData.get("result_code"); 73                 if (result_code.equals(WXPayConstants.SUCCESS)) { 74                     voUnifiedOrderWx = new VoUnifiedOrderWx(); 75                     // 时间戳 76                     voUnifiedOrderWx.setTimeStamp(BaseToolsUtil.systemtimeLong()/1000 + ""); 77                     // 随机串 78                     voUnifiedOrderWx.setNonceStr(respData.get("nonce_str")); 79                     // 数据包 80                     voUnifiedOrderWx.setPackageValue("prepay_id=" + respData.get("prepay_id")); 81                      82                     // 二次签名 83                     HashMapString, String dataPay = new HashMapString, String(); 84                     dataPay.put("appId", respData.get("appid")); 85                     dataPay.put("nonceStr", voUnifiedOrderWx.getNonceStr()); 86                     dataPay.put("package", voUnifiedOrderWx.getPackageValue()); 87                     dataPay.put("timeStamp", voUnifiedOrderWx.getTimeStamp()); 88                     dataPay.put("signType", "MD5"); 89                     String sign = WXPayUtil.generateSignature(dataPay, config.getKey()); 90                     // 签名 91                     voUnifiedOrderWx.setSign(sign); 92                 } 93             } 94         } catch (Exception e) { 95             e.printStackTrace(); 96         } 97         return voUnifiedOrderWx; 98     } 99     100     101     /**102      * 企业付款(提现)103      * @param wxWithdrawOrder104      * @param openid    105      * @param ip106      * @throws Exception107      */108     public static void transfers(WxWithdrawOrder wxWithdrawOrder, String openid, String ip) throws Exception {109         HashMapString, String data = new HashMapString, String();110         // 商户订单号111         data.put("partner_trade_no", wxWithdrawOrder.getOrderNo());112         // 用户openid113         data.put("openid", openid);114         // 校验用户姓名选项115         data.put("check_name", "NO_CHECK");116         // 金额117         data.put("amount", wxWithdrawOrder.getMoney() + "");118         // 企业付款描述信息119         // TODO120         data.put("desc", "提现");121         // Ip地址122         data.put("spbill_create_ip", ip);123             124         if (null == wxpay) {125             WXpayCommonIns();126         }127         String respXml = wxpay.transfers(data);//企业付款128         System.out.println(respXml);129         MapString, String respData = WXPayUtil.xmlToMap(respXml);130         wxWithdrawOrder.setRemark(respData);131         wxWithdrawOrder.setRemark2(respXml);132         // 返回状态码133         String return_code = respData.get("return_code");134         System.out.println(return_code);135         if (return_code.equals(WXPayConstants.SUCCESS)) {136             // 业务结果处理137         }138     }139     140     141     /**142      * @description:微信退款业务封装(支付押金退还);143      * @param   PayLog order:支付订单信息144      *           Double refundAmount:退款金额145      * @return 微信退款接口返回数据  true 退款成功  false 退款失败146      * @author:FanHaoJian147      * @throws Exception 148      */149     public static Boolean refundOrder(WxWithdrawOrder orderInfo,Double refundAmount) throws Exception{150         if (null == wxpay) {151             WXpayCommonIns();152         }153         HashMapString, String data = new HashMapString, String();154             data.put("out_trade_no", orderInfo.getOrderNo());155             data.put("out_refund_no", orderInfo.getOrderNo());156             data.put("total_fee", "1000");//价钱分157             data.put("refund_fee", String.valueOf((int)(refundAmount*100)));158             data.put("refund_fee_type", "CNY");159             data.put("op_user_id", config.getMchID());160             try {161                 MapString, String r = wxpay.refund(data);//订单退款162                 System.out.println(r);163                 return Boolean.TRUE;164             } catch (Exception e) {165                 e.printStackTrace();166             }167         return Boolean.FALSE;168     }169     170 }
View Code
  • 控制层接口
小程序小程序
  1 package com.karat.cn.action;  2   3 import java.io.BufferedOutputStream;  4 import java.io.ByteArrayOutputStream;  5 import java.io.IOException;  6 import java.io.InputStream;  7 import java.util.HashMap;  8 import java.util.Map;  9  10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12  13 import org.springframework.stereotype.Controller; 14 import org.springframework.web.bind.annotation.RequestMapping; 15  16 import com.karat.cn.util.WXPayConfigImpl; 17 import com.karat.cn.util.WXPayConstants; 18 import com.karat.cn.util.WXPayUtil; 19 import com.karat.cn.wxCommon.IpAddressUtil; 20 import com.karat.cn.wxCommon.WXpayCommon; 21 import com.karat.cn.wxCommon.WxWithdrawOrder; 22 /** 23  * 接口模板 24  * @author 开发 25  * 26  */ 27 @Controller 28 @RequestMapping("wx") 29 public class WxPayAction { 30      31     private HttpServletRequest request; 32     private HttpServletResponse response; 33     private WXPayConfigImpl config; 34     /** 35      * 支付 36      * @return 37      */ 38     @RequestMapping("/pay") 39     public String pay(){ 40         MapString, String remark=new HashMapString, String(); 41         //新建订单 42         WxWithdrawOrder order=new WxWithdrawOrder("1","1",1,"1","1",remark,""); 43         try { 44             WXpayCommon.payOrderWx(order, "用户openId",IpAddressUtil.getIpAddr(request), true); 45         } catch (IOException e) { 46             // TODO Auto-generated catch block 47             e.printStackTrace(); 48         } 49         return ""; 50     } 51     /** 52      * 微信回调接口notify(支付填写的支付成功回调地址) 53      * @throws Exception 54      */ 55     @RequestMapping("/notifyPayWx") 56     public void notifyPayWx() throws Exception { 57         boolean state = false; 58         System.out.println("微信回调"); 59         InputStream inStream = request.getInputStream(); 60         ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); 61         byte[] buffer = new byte[1024]; 62         int len = 0; 63         while ((len = inStream.read(buffer)) != -1) { 64             outSteam.write(buffer, 0, len); 65         } 66         outSteam.close(); 67         inStream.close(); 68         String resultXml = new String(outSteam.toByteArray(), "utf-8"); 69         System.out.println("resultXml:" + resultXml); 70         MapString, String resultMap = WXPayUtil.xmlToMap(resultXml); 71         // 签名验证 72         if (WXPayUtil.isSignatureValid(resultXml, config.getKey())) { 73             String resXml = ""; 74             
              
              
            

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎