1、调用微信统一下单接口,必要参数:appid(公众账号ID)、mch_id(商户号)、nonce_str(随机字符串)、sign(签名)、body(商品描述)、out_trade_no(商户订单号)、total_fee(标价金额)、spbill_create_ip(终端IP)、notify_url(通知地址)、trade_type(交易类型)
notify_url必须是外网可访问的
(官方接口文档https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1)
SortedMap<String, Object> parameters = new TreeMap<String, Object>();
//微信给的appid
parameters.put("appid", "wxd678efh567hg6787");
//微信给的商户号
parameters.put("mch_id", "1230000109");
// 默认 "WEB"
parameters.put("device_info", "WEB");
//商品描述
parameters.put("body", "大马猴");
// 32 位随机字符串
parameters.put("nonce_str", wxUtils.gen32RandomString());
//通知地址(支付成功后,微信会携带参数访问该地址,接口内根据支付状态进行下一步处理)
parameters.put("notify_url", notifyUrl);
//商户订单号 也能用gen32RandomString(),但是一定要从头到尾都是一个编号,生成就存库
parameters.put("out_trade_no", orderId);
//标价金额 参数单位为(分*100) 为元
parameters.put("total_fee", price.multiply(BigDecimal.valueOf(100)).intValue());
//终端IP
parameters.put("spbill_create_ip", getIpAddr(HttpServletRequest));
//交易类型
parameters.put("trade_type", "APP");
//附加数据(商户内部做判断的参数,微信访问回调地址时会把他原封不动带回来)
parameters.put("attach", "1");
// 签名 sign 必须在最后,key是微信给的商家私钥