• 集成微信支付的代码。兼容小程序,扫码,app,公众号。h5 支付 ,以及 服务商提现


     
    /**
     * 因为微信总是很多个商户号很多和appid。很多个密钥文件,所以全部改成手动传值的方式,就可以支持多商户调用
     *
     * @param appId    商户的appid
     * @param mchId    商户的商户号
     * @param key      商户的支付用的密钥
     * @param certPath 商户的退款用的退款文件地址,非必传,没有就传null,具体看开发文档是否需退款文件
     * @throws Exception
     */
    
    调用示例测试代码。扫码支付返回的是一个base64格式的二维码。需要拼接前缀的(有逗号) :  data:image/jpeg;base64,
    
    public static void main(String[] args) throws Exception {
            WXPayEntrance wxPayEntrance = new WXPayEntrance("wxab8acb865bb1637e", "11473623", "2ab9071b06b9f739b950ddb41db2690d", null);
            WXPayVO wxPayVO = new WXPayVO();
            wxPayVO.setBody("1231231666623");
            wxPayVO.setTotalFee("1");
            wxPayVO.setNotifyUrl("https://********/api/wxpayreturn");
            wxPayVO.setTradeType("NATIVE");
            wxPayVO.setOutTradeNo("ty190523151415047046");
            wxPayVO.setUid(123123123);
            wxPayVO.setSpbillCreateIp("192.168.17.214");
            Map<String, String> map = wxPayEntrance.doUnifiedOrder(wxPayVO);
            System.out.println(map);
    
    //        PayRefundVo payRefundVo = new PayRefundVo();
    //        payRefundVo.setOutRefundNo("A190523155119103");
    //        payRefundVo.setOutTradeNo("ty190523155047046");
    //        payRefundVo.setRefundDesc("退款");
    //        payRefundVo.setRefundFee("10");
    //        payRefundVo.setUid(123123123);
    //        payRefundVo.setRefundFeeType("CNY");
    //        payRefundVo.setTotalFee("120");
    //        Map<String, String> map = wxPayEntrance.doRefund(payRefundVo);
    //        System.out.println(map);
        }
    

      

    异步回调代码如下:
    
    package com.huis.portal.controller;
    
    import com.huis.portal.weixinpay.WXPayUtil;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.transaction.annotation.Transactional;
    import org.springframework.web.bind.annotation.*;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Map;
    import java.util.SortedMap;
    import java.util.TreeMap;
    
    @RestController
    @Api(description = "支付模块模块")
    @CrossOrigin(origins = "*", maxAge = 3600)
    @Transactional(rollbackFor = Exception.class)
    public class PayRestController {
    
    
       @ApiOperation(value = "微信回调接口", notes = "微信回调接口")
       @RequestMapping(value = "/api/wxpayreturn", method = RequestMethod.POST)
       public String WeixinParentNotifyPage(HttpServletRequest request, HttpServletResponse response) throws Exception {
          // 返回给微信的处理结果
          String result = null;
          String inputLine;
          String notityXml = "";
          request.setCharacterEncoding("UTF-8");
          response.setCharacterEncoding("UTF-8");
          response.setContentType("text/html;charset=UTF-8");
          response.setHeader("Access-Control-Allow-Origin", "*");
          // 微信给返回的东西
          try {
             while ((inputLine = request.getReader().readLine()) != null) {
                notityXml += inputLine;
             }
             request.getReader().close();
          } catch (Exception e) {
             e.printStackTrace();
             result = setXml("fail", "xml获取失败");
             return result;
          }
          if (StringUtils.isEmpty(notityXml)) {
             result = setXml("fail", "xml为空");
             return result;
          }
          Map<String, String> map = WXPayUtil.xmlToMap(notityXml);
          String out_trade_no = (String) map.get("out_trade_no");// 获取商户订单号
          String result_code = (String) map.get("result_code");// 业务结果
          String total_fee = (String) map.get("total_fee");// 获取订单金额
          String appid = (String) map.get("appid");// 获取订单金额
          if (map.get("result_code").equals("SUCCESS")) {
             //TODO
    
    
             result = setXml("SUCCESS", "OK");
             return result;
          }else {
             result = setXml("fail", "xml为空");
             return result;
          }
    
       }
       // 通过xml 发给微信消息
       public static String setXml(String return_code, String return_msg) {
          SortedMap<String, String> parameters = new TreeMap<String, String>();
          parameters.put("return_code", return_code);
          parameters.put("return_msg", return_msg);
          return "<xml><return_code><![CDATA[" + return_code + "]]>" + "</return_code><return_msg><![CDATA[" + return_msg
                + "]]></return_msg></xml>";
       }
    
    }
    

      

    密钥文件通过maven打包的过程中会被maven编译,修改文件内容,需要在pom文件中加入忽略插件

    <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <configuration>
                        <nonFilteredFileExtensions>
                            <nonFilteredFileExtension>p12</nonFilteredFileExtension>
                            <nonFilteredFileExtension>pem</nonFilteredFileExtension>
                        </nonFilteredFileExtensions>
                    </configuration>
                </plugin>
    

      

    微信支付代码下载地址:链接:https://pan.baidu.com/s/1kZs5hxQuzxmRR50N-DOKSg  密码:u4rj

  • 相关阅读:
    Exception: Failed to execute 'setItem' on 'Storage'
    element ui中动态添加的表单进行验证
    10. 自定义assertThat中的Matcher函数lt、gt
    8. anyInt()、anyString()、eq()、anyCollection()、verify验证void方法
    7. 参数匹配:eq、isA、any
    6. spy
    4-5. when-thenXX、doXX-when、Answer、thenCallRealMethod
    2. 开启Mock的三种方式、深度Mook
    1. quickstart
    Sentinel
  • 原文地址:https://www.cnblogs.com/hahahehexixihoho/p/10916590.html
Copyright © 2020-2023  润新知