|
@@ -299,6 +299,86 @@ public class WxPayServiceImpl implements WxPayService {
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * JSAPI支付
|
|
|
+ * @param paramData 参数
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public Map<String,Object> jsapiPay(JSONObject paramData) throws Exception {
|
|
|
+ log.info("jsapiPay===="+paramData.toString());
|
|
|
+ String productId = paramData.getString("productId");
|
|
|
+ String userId = paramData.getString("userId");
|
|
|
+ String resultId = paramData.getString("resultId");
|
|
|
+ String description = paramData.getString("description");
|
|
|
+ String price = paramData.getString("total");
|
|
|
+ Integer money = new BigDecimal(String.valueOf(price)).movePointRight(2).intValue();
|
|
|
+ OrderInfo orderInfo = orderInfoService.createOrderByProductId(productId,userId,resultId,money,WxTradeType.JSAPI);
|
|
|
+ //判断支付码连接是否存在
|
|
|
+ String codeUrl =orderInfo.getCodeUrl();
|
|
|
+ log.info("生成订单----------------------"+StringUtils.hasLength(codeUrl));
|
|
|
+ if (StringUtils.hasLength(codeUrl) ){
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
+ map.put("codeUrl",codeUrl);
|
|
|
+ map.put("orderNo",orderInfo.getOrderNo());
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+ //调用统一下单API
|
|
|
+ HttpPost httpPost = new HttpPost(wxPayConfig.getDomain().concat(WxTradeType.JSAPI.getType()));
|
|
|
+ //构建必要参数
|
|
|
+ Gson gson = new Gson();
|
|
|
+ Map<String,Object> paramsMap = new HashMap<>();
|
|
|
+ paramsMap.put("sp_appid",wxPayConfig.getAppId());
|
|
|
+ paramsMap.put("sp_mchid",wxPayConfig.getMchId());
|
|
|
+ paramsMap.put("description",description);
|
|
|
+ paramsMap.put("out_trade_no",orderInfo.getOrderNo());
|
|
|
+ paramsMap.put("notify_url",wxPayConfig.getNotifyDomain().concat(WxNotifyType.NATIVE_NOTIFY.getType()));
|
|
|
+ Map<String,Object> amountMap = new HashMap<>();
|
|
|
+ amountMap.put("total", orderInfo.getTotalFee());
|
|
|
+ amountMap.put("currency", "CNY");
|
|
|
+ paramsMap.put("amount", amountMap);
|
|
|
+ log.info("paramsMap:"+paramsMap);
|
|
|
+
|
|
|
+ Map<String,String> payerMap = new HashMap<>();
|
|
|
+ payerMap.put("sp_openid",paramData.getString("openId"));
|
|
|
+ paramsMap.put("payer",payerMap);
|
|
|
+
|
|
|
+ //将body转化为json字符串
|
|
|
+ String jsonParams = gson.toJson(paramsMap);
|
|
|
+ log.info("请求参数-------"+jsonParams);
|
|
|
+ StringEntity entity = new StringEntity(jsonParams,"utf-8");
|
|
|
+ entity.setContentType("application/json");
|
|
|
+ httpPost.setEntity(entity);
|
|
|
+ httpPost.setHeader("Accept","application/json");
|
|
|
+ //完成签名并执行请求
|
|
|
+ CloseableHttpResponse response = wxPayClient.execute(httpPost);
|
|
|
+ //获取响应
|
|
|
+ try {
|
|
|
+ String bodyAsString = EntityUtils.toString(response.getEntity());//获取响应体
|
|
|
+ int statusCode = response.getStatusLine().getStatusCode();//获取状态码
|
|
|
+ if (statusCode == 200){//成功
|
|
|
+ log.info("成功,返回结果 = "+bodyAsString);
|
|
|
+ }else if (statusCode == 204){//成功 无返回body
|
|
|
+ log.info("成功");
|
|
|
+ }else {
|
|
|
+ log.info("下单失败,响应码 = " + statusCode+ ",返回结果 = " + bodyAsString);
|
|
|
+ throw new IOException("request failed"+bodyAsString);
|
|
|
+ }
|
|
|
+ //响应结果
|
|
|
+ Map<String,String> resultMap = gson.fromJson(bodyAsString,HashMap.class);
|
|
|
+ codeUrl = resultMap.get("prepay_id");
|
|
|
+ orderInfo.setCodeUrl(codeUrl);
|
|
|
+ orderInfoService.saveCodeUrl(orderInfo);
|
|
|
+ log.info("orderInfo:" + orderInfo);
|
|
|
+ Map<String, Object> map = new HashMap<>();
|
|
|
+ map.put("codeUrl", codeUrl);
|
|
|
+ map.put("orderNo", orderInfo.getOrderNo());
|
|
|
+ return map;
|
|
|
+ }finally {
|
|
|
+ response.close();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
|
|
|
|