微信APP支付

微信支付开发文档地址
SDK与DEMO下载--JAVA .NET C# PHP

微信支付参数配置

public class WXPayConfig {
    //应用ID
    public final static String APP_ID = "yourAppId";
    
    //API密钥
    public final static String APP_KEY = "yourAppKey";
    
    //商户号
    public final static String MCH_ID = "yourMchId";
    
    //统一下单地址
    public final static String URL_UNIFIED_ORDER = "https://api.mch.weixin.qq.com/pay/unifiedorder";
    
    //查询账单地址
    public final static String URL_ORDER_QUERY = "https://api.mch.weixin.qq.com/pay/orderquery";
    
    //统一下单回调地址
    public final static String NOTIFY_URL = "yourNotifyUrl";
}

统一下单

public static JSONObject wxUnifiedOrder(String orderId, String cost,
            String body, String ip, long expireTime) {
        JSONObject ret = new JSONObject();
        SortedMap<String, String> param = new TreeMap<String, String>();
        param.put("appid", WXPayConfig.APP_ID);
        param.put("mch_id", WXPayConfig.MCH_ID);
        param.put("nonce_str", WXPayUtil.generateNonceStr());
        param.put("body", body);
        param.put("out_trade_no", orderId);
        param.put("fee_type", "CNY");
        param.put("total_fee", cost);
        param.put("spbill_create_ip", ip);
        param.put("notify_url", WXPayConfig.NOTIFY_URL);
        param.put("trade_type", "APP");
        param.put("time_expire", timeExpire(expireTime));
        // 生成sign并转化成xml格式
        String xml = "";
        try {
            xml = WXPayUtil.generateSignedXml(param, WXPayConfig.APP_KEY);
        } catch (Exception e) {
            ret.put("code", -1);
            ret.put("msg", e.getMessage());
        }

        String response = "";
        try {
            response = HttpRequest.post(WXPayConfig.URL_UNIFIED_ORDER, xml);
        } catch (Exception e) {
            ret.put("code", -1);
            ret.put("msg", e.getMessage());
        }

        Map<String, String> result = null;
        try {
            result = WXPayUtil.xmlToMap(response);
        } catch (Exception e) {
            ret.put("code", -1);
            ret.put("msg", e.getMessage());
        }

        if (!result.isEmpty() && result.get("return_code").equals("SUCCESS")) {
            if (result.get("result_code").equals("SUCCESS")) {
                try {
                    ret = wxAppPay(result);
                } catch (Exception e) {
                }
                ret.put("code", 0);
                logger.error("InfoMsg:--- 微信统一下单请求交易成功");
            } else {
                String message = result.get("err_code_des");
                ret.put("code", -1);
                ret.put("msg", "微信统一下单请求交易解析失败");
                logger.error("errorMsg:--- 微信统一下单请求交易解析失败" + message);
            }
        } else {
            ret.put("code", -1);
            ret.put("msg", "微信统一下单请求交易解析失败");
            logger.error("errorMsg:--- 微信统一下单请求交易解析失败");
        }
        return ret;
    }

账单查询

public static String wxQueryOrder() {
        System.out.println("infoMsg:--- 微信支付订单查询开始");
        String message = "";
        try {
            SortedMap<String, String> param = new TreeMap<String, String>();
            param.put("appid", WXPayConfig.APP_ID);
            param.put("mch_id", WXPayConfig.MCH_ID);
            param.put("nonce_str", WXPayUtil.generateNonceStr());
            param.put("out_trade_no", "20171205");

            String xml = WXPayUtil
                    .generateSignedXml(param, WXPayConfig.APP_KEY);

            String response = HttpRequest
                    .post(WXPayConfig.URL_ORDER_QUERY, xml);

            if (response != null && response != "") {
                Map<String, String> result = WXPayUtil.xmlToMap(response);

                // System.out.println(result);

                if (!result.isEmpty()) {
                    String return_code = result.get("return_code");
                    if (return_code.equals("SUCCESS")) {
                        String result_code = result.get("return_code");
                        if (result_code.equals("SUCCESS")) {
                            message = (String) result.get("trade_state_desc");
                        }
                    } else {
                        message = (String) result.get("err_code_des");
                    }
                } else {

                }
            } else {

            }
            // System.out.println("infoMsg:--- 微信支付订单查询结束");
        } catch (Exception e) {
            // System.out.println("erroroMsg:--- 微信支付订单查询失败" + e.getMessage()
            // + message);
        }
        return message;
    }

支付结果异步回调

public static JSONObject wxPayNotify(String body) {
        JSONObject result = new JSONObject();
        System.out.println("infoMsg:--- 微信异步通知开始");
        String wx_map = "";
        try {
            String xml = body;
            if (xml != null && xml != "") {
                Map<String, String> resultMap = WXPayUtil.xmlToMap(xml);
                // 验签
                if (!WXPayUtil.isSignatureValid(xml, WXPayConfig.APP_KEY)) {
                    if (resultMap.get("return_code").equals("SUCCESS")) {
                        Double amount = Double.parseDouble(resultMap
                                .get("total_fee"));
                        String passbackParams = resultMap.get("total_fee");
                        String outOrderNo = resultMap.get("out_trade_no");
                        Map<String, String> map = new HashMap<>();
                        map.put("return_code", "SUCCESS");
                        map.put("return_msg", "OK");
                        wx_map = WXPayUtil.mapToXml(map);
                        result.put("out_trade_no", outOrderNo);
                        result.put("code", 0);
                    }
                }
            } else {
                result.put("code", -1);
                result.put("msg", "微信异步通知失败");
                logger.error("infoMsg:--- 微信异步通知失败");
            }
        } catch (Exception e) {
            result.put("code", -1);
            result.put("msg", "微信异步通知失败" + e.getMessage());
            logger.error("msg", "微信异步通知失败" + e.getMessage());
        }
        result.put("wx_map", wx_map);
        return result;
    }

支付二次签名

public static JSONObject wxAppPay(Map<String, String> param)
            throws Exception {
        JSONObject result = new JSONObject();
        SortedMap<String, String> sortedMap = new TreeMap<String, String>();
        sortedMap.put("appid", WXPayConfig.APP_ID);
        sortedMap.put("partnerid", WXPayConfig.MCH_ID);
        sortedMap.put("prepayid", param.get("prepay_id"));
        sortedMap.put("package", "Sign=WXPay");
        String nonceStr = WXPayUtil.generateNonceStr();
        long timestamp = System.currentTimeMillis() / 1000;
        sortedMap.put("noncestr", nonceStr);
        sortedMap.put("timestamp", String.valueOf(timestamp));

        String sign = WXPayUtil.generateSignature(sortedMap,
                WXPayConfig.APP_KEY);

        result.put("appid", WXPayConfig.APP_ID);
        result.put("partnerid", WXPayConfig.MCH_ID);
        result.put("prepayid", param.get("prepay_id"));
        result.put("package", "Sign=WXPay");
        result.put("noncestr", nonceStr);
        result.put("timestamp", String.valueOf(timestamp));
        result.put("sign", sign);
        return result;
    }

过期时间格式转化

private static String timeExpire(long time) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
                "yyyyMMddHHmmss");
        Date date = new Date(time * 1000);
        return simpleDateFormat.format(date);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 欢迎留言、转发微信极速开发系列文章(微信支付、授权获取用户信息等):点击这里 目录1、注册账号、开发者认证2、添加...
    Javen205阅读 11,706评论 10 66
  • 【申请流程】 开发微信APP支付,需要先去微信开放平台申请移动应用,并开通微信支付功能,通过审核后方可进行开发; ...
    狼凤皇阅读 4,518评论 0 6
  • 引子: 以下的部分代码、思路来自于 CSDN的一位博客主 ,以及 后宫 —— 易水 的支持。 官方文档 1.前期申...
    冰凝雪国阅读 1,337评论 0 4
  • 先看看支付时序图 一、时序图 打眼一看好像挺复杂的,仔细一看很明了,思路逻辑很清晰,很有条理,逻辑缜密。大体流程和...
    追沐阅读 2,211评论 0 1
  • “你哭过了。” 他突然开口,惊的心中群鸟高飞起。挑眉略带迷惘,自认为倒是掩饰挺好,怎的就被他瞧出个一二来了?抬...
    战且歌阅读 581评论 0 0

友情链接更多精彩内容