|
|
@@ -291,7 +291,7 @@ public class WxPayAppController extends WxPayUtils {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 供应商充值
|
|
|
+ * 供应商充值小程序
|
|
|
* @param price 金额
|
|
|
*/
|
|
|
@GetMapping("wxpaySupplierBalanceJSAPI")
|
|
|
@@ -353,6 +353,75 @@ public class WxPayAppController extends WxPayUtils {
|
|
|
returnMap.put("data", resultMap);
|
|
|
returnMap.put("msg", "200");
|
|
|
return returnMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 供应商购买次数 小程序
|
|
|
+ * @param offerNum 次数
|
|
|
+ * @param request 参数
|
|
|
+ * @return 返回结果
|
|
|
+ */
|
|
|
+ @GetMapping("wxpaySupplierOfferNumJSAPI")
|
|
|
+ public Map<String, Object> wxpaySupplierOfferNumJSAPI(String offerNum, String code, HttpServletRequest request) throws IOException {
|
|
|
+ //当前时间
|
|
|
+ String currTime = PayToolUtil.getCurrTime();
|
|
|
+ String strTime = currTime.substring(8, currTime.length());
|
|
|
+ String strRandom = String.valueOf(PayToolUtil.buildRandom(4));
|
|
|
+ String nonce_str = strTime + strRandom;
|
|
|
+ //获取token
|
|
|
+ Map<String, Object> userMap = ParsingToken.tokenParsing(request);
|
|
|
+ Map<String, Object> map1 = personalServce.getByNumber();//获取报价单单价
|
|
|
+ Map<String, Object> map2 = (Map<String, Object>) map1.get("data");
|
|
|
+ String price = (Integer.parseInt(offerNum) * Double.parseDouble(String.valueOf(map2.get("power_unit")))) + ""; //购买次数 * 报价单单价
|
|
|
+ //订单号
|
|
|
+ WXPayUtil wxPayUtil = new WXPayUtil(); //微信工具类
|
|
|
+ PayToolUtil payToolUtil = new PayToolUtil();//数据转换工具类
|
|
|
+ String out_trade_no = wxPayUtil.getOrderNo();
|
|
|
+ SortedMap<String, String> packageParams = new TreeMap<String, String>();
|
|
|
+ String uuid = snowflakeUtil.nextId() + "";//不重复编号
|
|
|
+ packageParams.put("appid", wxLogin.getAppIdJSAPI());//公众账号ID
|
|
|
+ packageParams.put("attach", "gysOfferNum" + "," + uuid + "," + userMap.get("code") + "," + offerNum);//自定义信息
|
|
|
+ packageParams.put("mch_id", MCHID);//商户号
|
|
|
+ packageParams.put("body", "途丫-" + out_trade_no);//商品描述
|
|
|
+ packageParams.put("out_trade_no", out_trade_no);//商户订单号
|
|
|
+ packageParams.put("nonce_str", nonce_str);//随机字符串
|
|
|
+ packageParams.put("total_fee", wxPayUtil.getMoney(price)); //订单金额信息
|
|
|
+ packageParams.put("spbill_create_ip", CREATE_IP);//终端IP APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP
|
|
|
+ packageParams.put("notify_url", NOTIFY_URL);//通知地址 异步接收微信支付结果通知的回调地址,通知url必须为外网可访问的url,不能携带参数
|
|
|
+ packageParams.put("trade_type", "JSAPI");//小程序支付
|
|
|
+ Map<String, Object> mapUser = wxLoginController.wxLoginJSAPI(code);
|
|
|
+ packageParams.put("openid", (String) mapUser.get("openId"));//支付者
|
|
|
+ // 签名
|
|
|
+ String sign = payToolUtil.createSign("UTF-8", packageParams, KEY);
|
|
|
+ packageParams.put("sign", sign);
|
|
|
+ // 将请求参数转换为xml格式的string
|
|
|
+ String requestXML = payToolUtil.getRequestXml(packageParams);
|
|
|
|
|
|
+
|
|
|
+ // 调用微信支付统一下单接口
|
|
|
+ String resXml = HttpUtil.postData("https://api.mch.weixin.qq.com/pay/unifiedorder", requestXML);
|
|
|
+ System.out.println(resXml);
|
|
|
+ // 解析微信支付结果
|
|
|
+ Map map = null;
|
|
|
+ try {
|
|
|
+ map = doXMLParse.doXMLParse(resXml);
|
|
|
+ } catch (JDOMException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ //返回前端生成二维码
|
|
|
+ Map<String, Object> resultMap = new HashMap<>();
|
|
|
+ String time = String.valueOf(wxPayUtil.getCurrentTimestamp());
|
|
|
+ resultMap.put("outTradeNo", out_trade_no);//自生成订单号
|
|
|
+ resultMap.put("prepayId", map.get("prepay_id"));//微信订单号
|
|
|
+ resultMap.put("nonceStr", nonce_str); //不重复编号
|
|
|
+ resultMap.put("time", time); //不重复编号
|
|
|
+ resultMap.put("sign", wxPayUtil.singGenerate(packageParams, (String) map.get("prepay_id"), KEY, time, nonce_str)); //签名
|
|
|
+ resultMap.put("key", KEY);
|
|
|
+ Map<String, Object> returnMap = new HashMap<>();//返回结果
|
|
|
+ returnMap.put("data", resultMap);
|
|
|
+ returnMap.put("msg", "200");
|
|
|
+ return returnMap;
|
|
|
}
|
|
|
}
|