zoukankan      html  css  js  c++  java
  • APP微信支付实现

    参考官方文档

    设计到的API: 统一下单API、支付结果通知API和查询订单API

    下面代码是请求预支付ID

            // 构建下单bean
            final WxPayUnifiedOrderBean unifiedOrderBean = new WxPayUnifiedOrderBean();
            unifiedOrderBean.setAppid(wxPayConfig.getAppId());
            unifiedOrderBean.setMch_id(wxPayConfig.getMchId());
            unifiedOrderBean.setNonce_str(this.getNonceStr(16));
            unifiedOrderBean.setBody("支付");
            unifiedOrderBean.setOut_trade_no(order.getHubOrderNo());
            unifiedOrderBean.setTotal_fee(order.getTotalFee());
            unifiedOrderBean.setSpbill_create_ip(order.getSpbill_create_ip());
            unifiedOrderBean.setNotify_url(this.paymentProperties.getWeixin().getNotify_url());
            unifiedOrderBean.setSign(this.generateSignForPrePayId(unifiedOrderBean, wxPayConfig.getSecret()));
    
            // 请求统一下单接口
            final WxPayPrePayBean bean = this.requestWx(unifiedOrderBean);
    
    /**
         * 请求统一下单接口
         *
         * @param unifiedOrderBean
         * @return
         */
        private WxPayPrePayBean requestWx(final WxPayUnifiedOrderBean unifiedOrderBean) {
    
            final XStream xStream = new XStream(new DomDriver("UTF-8", new NoNameCoder()));
            xStream.autodetectAnnotations(true);
            final String postXml = xStream.toXML(unifiedOrderBean);
    
            // 发送请求
            final HttpHeaders headers = new HttpHeaders();
            final MediaType type = MediaType.parseMediaType("application/x-www-form-urlencoded; charset=UTF-8");
            headers.setContentType(type);
            final HttpEntity<String> requestEntity = new HttpEntity<>(postXml, headers);
    
            final RestTemplate restTemplate = new RestTemplate();
            final ResponseEntity<String> responseEntity = restTemplate.postForEntity(
                    PaymentConstant.WX_PREPARE_ORDER_URL, requestEntity, String.class);
    
            // 解析请求结果
            final XStream xStreamResult = new XStream(new DomDriver("UTF-8", new NoNameCoder()));
            xStreamResult.processAnnotations(WxPayPrePayBean.class);
            try {
                final String returnStr = new String(responseEntity.getBody().getBytes("ISO-8859-1"), "UTF-8");
    
                System.out.println(responseEntity.getBody());
                System.out.println(returnStr);
                final WxPayPrePayBean bean = (WxPayPrePayBean) xStreamResult.fromXML(returnStr);
                return bean;
            } catch (final Exception e) {
                e.printStackTrace();
                return null;
            }
    
        }
    ---栖息之鹰(一个外表懒洋洋的内心有激情的程序员) 此博客为笔者原著,转载时请注明出处,谢谢!
  • 相关阅读:
    2021软件工程-第一周作业01准备工作
    String.matches()的用法
    Idea使用JSP出现404问题---已解决
    如何解决Tomcat启动闪退现象(环境配置没问题)
    解决启动java的web项目时端口占用问题
    IntelliJ IDEA 连接数据库 详细过程-包含使用jdbc连接数据库
    ApplicationContextAware接口认识
    RestTemplate 服务间接口调用
    maven相关
    FastJson:json字符串与Java对象转换
  • 原文地址:https://www.cnblogs.com/roostinghawk/p/7009636.html
Copyright © 2011-2022 走看看