Skip to content

Commit

Permalink
🆕 #2631 【小程序】小程序交易组件-订单服务新增获取订单列表和生成支付参数的接口
Browse files Browse the repository at this point in the history
  • Loading branch information
zhongjun96 authored May 19, 2022
1 parent a6d4b6e commit 4de09fa
Show file tree
Hide file tree
Showing 7 changed files with 204 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

import cn.binarywang.wx.miniapp.bean.shop.WxMaShopOrderInfo;
import cn.binarywang.wx.miniapp.bean.shop.request.WxMaShopOrderPayRequest;
import cn.binarywang.wx.miniapp.bean.shop.response.WxMaShopAddOrderResponse;
import cn.binarywang.wx.miniapp.bean.shop.response.WxMaShopBaseResponse;
import cn.binarywang.wx.miniapp.bean.shop.response.WxMaShopGetOrderResponse;
import cn.binarywang.wx.miniapp.bean.shop.response.*;
import me.chanjar.weixin.common.error.WxErrorException;

import java.util.Date;

/**
* 小程序交易组件-订单服务
*
Expand All @@ -21,4 +21,46 @@ public interface WxMaShopOrderService {

WxMaShopGetOrderResponse getOrder(Integer orderId, String outOrderId, String openid)
throws WxErrorException;


/**
* <pre>
*
* 获取订单列表
*
* 请求方式:POST(HTTPS)
* 请求地址:<a href="https://api.weixin.qq.com/shop/order/get_list">请求地址</a>
*
* 文档地址:<a href="https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/ministore/minishopopencomponent2/API/order/get_order_list.html">文档地址</a>
* </pre>
*
* @param page 第x页,大于等于1
* @param pageSize 每页订单数,上限100
* @param desc 是否时间倒叙
* @param startCreateTime 起始创建时间
* @param endCreateTime 最终创建时间
* @return 订单列表信息
* @throws WxErrorException .
*/
WxMaShopGetOrderListResponse getOrderList(Integer page, Integer pageSize, Boolean desc, Date startCreateTime, Date endCreateTime)
throws WxErrorException;

/**
* <pre>
*
* 生成支付参数
*
* 请求方式:POST(HTTPS)
* 请求地址:<a href="https://api.weixin.qq.com/shop/order/getpaymentparams">请求地址</a>
*
* 文档地址:<a href="https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/business-capabilities/ministore/minishopopencomponent2/API/order/getpaymentparams.html">文档地址</a>
* </pre>
*
* @param orderId 微信侧订单id
* @param outOrderId 商家自定义订单ID
* @param openid 用户openid
* @return 支付参数
* @throws WxErrorException .
*/
WxMaShopGetPaymentParamsResponse getPaymentParams(String orderId, String outOrderId, String openid) throws WxErrorException;
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,10 @@
package cn.binarywang.wx.miniapp.api.impl;

import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.Shop.Order.ORDER_ADD;
import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.Shop.Order.ORDER_CHECK_SCENE;
import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.Shop.Order.ORDER_GET;
import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.Shop.Order.ORDER_PAY;

import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.WxMaShopOrderService;
import cn.binarywang.wx.miniapp.bean.shop.WxMaShopOrderInfo;
import cn.binarywang.wx.miniapp.bean.shop.request.WxMaShopOrderPayRequest;
import cn.binarywang.wx.miniapp.bean.shop.response.WxMaShopAddOrderResponse;
import cn.binarywang.wx.miniapp.bean.shop.response.WxMaShopBaseResponse;
import cn.binarywang.wx.miniapp.bean.shop.response.WxMaShopGetOrderResponse;
import cn.binarywang.wx.miniapp.bean.shop.response.*;
import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
import com.google.gson.JsonObject;
import lombok.RequiredArgsConstructor;
Expand All @@ -21,13 +14,22 @@
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.json.GsonHelper;
import me.chanjar.weixin.common.util.json.GsonParser;
import org.apache.commons.lang3.time.FastDateFormat;

import java.text.Format;
import java.util.Date;

import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.Shop.Order.*;

/**
* @author boris
*/
@RequiredArgsConstructor
@Slf4j
public class WxMaShopOrderServiceImpl implements WxMaShopOrderService {

private final Format dateFormat = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");

private static final String ERR_CODE = "errcode";
private static final String MATCH_KEY = "is_matched";
private final WxMaService wxMaService;
Expand All @@ -45,34 +47,49 @@ public Boolean checkScene(Integer scene) throws WxErrorException {

@Override
public WxMaShopAddOrderResponse addOrder(WxMaShopOrderInfo orderInfo) throws WxErrorException {
String responseContent = this.wxMaService.post(ORDER_ADD, orderInfo);
JsonObject jsonObject = GsonParser.parse(responseContent);
if (jsonObject.get(ERR_CODE).getAsInt() != 0) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
}
return WxMaGsonBuilder.create().fromJson(responseContent, WxMaShopAddOrderResponse.class);
return this.post(ORDER_ADD,orderInfo, WxMaShopAddOrderResponse.class);
}

@Override
public WxMaShopBaseResponse orderPay(WxMaShopOrderPayRequest request) throws WxErrorException {
String responseContent = this.wxMaService.post(ORDER_PAY, request);
JsonObject jsonObject = GsonParser.parse(responseContent);
if (jsonObject.get(ERR_CODE).getAsInt() != 0) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
return this.post(ORDER_PAY,request, WxMaShopBaseResponse.class);
}

@Override
public WxMaShopGetOrderResponse getOrder(Integer orderId, String outOrderId, String openid) throws WxErrorException {
return this.post(ORDER_GET, GsonHelper.buildJsonObject("order_id", orderId, "out_order_id", outOrderId,
"openid", openid), WxMaShopGetOrderResponse.class);
}

@Override
public WxMaShopGetOrderListResponse getOrderList(Integer page, Integer pageSize, Boolean desc, Date startCreateTime, Date endCreateTime) throws WxErrorException {
JsonObject object = new JsonObject();
object.addProperty("page", page == null ? 1 : page);
object.addProperty("page_size", pageSize == null ? 10 : pageSize);
object.addProperty("desc", desc ? 1 : 2);
if (startCreateTime != null) {
object.addProperty("start_create_time", this.dateFormat.format(startCreateTime));
}
if (endCreateTime != null) {
object.addProperty("end_create_time", this.dateFormat.format(endCreateTime));
}
return WxMaGsonBuilder.create().fromJson(responseContent, WxMaShopBaseResponse.class);
return this.post(ORDER_GET_LIST, object, WxMaShopGetOrderListResponse.class);
}

@Override
public WxMaShopGetOrderResponse getOrder(Integer orderId, String outOrderId, String openid)
throws WxErrorException {
String responseContent = this.wxMaService.post(ORDER_GET,
public WxMaShopGetPaymentParamsResponse getPaymentParams(String orderId, String outOrderId, String openid) throws WxErrorException {
return this.post(ORDER_GET_PAYMENT_PARAMS,
GsonHelper.buildJsonObject("order_id", orderId, "out_order_id", outOrderId,
"openid", openid));
"openid", openid), WxMaShopGetPaymentParamsResponse.class);
}


private <T> T post(String url, Object params, Class<T> classOfT) throws WxErrorException {
String responseContent = this.wxMaService.post(url, params);
JsonObject jsonObject = GsonParser.parse(responseContent);
if (jsonObject.get(ERR_CODE).getAsInt() != 0) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
}
return WxMaGsonBuilder.create().fromJson(responseContent, WxMaShopGetOrderResponse.class);
return WxMaGsonBuilder.create().fromJson(responseContent, classOfT);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@
public class WxMaShopOrderDetail implements Serializable {
private static final long serialVersionUID = 3325843289672341160L;

/**
* 推广员、分享员信息
*/
@SerializedName("promotion_info")
private WxMaShopPromotionInfo promotionInfo;

/**
* 下单商品信息
* <pre>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package cn.binarywang.wx.miniapp.bean.shop;

import com.google.gson.annotations.SerializedName;
import lombok.Data;

import java.io.Serializable;

/**
* 推广员、分享员信息
*
* @author zhongjun
* @date 2022/5/17
**/
@Data
public class WxMaShopPromotionInfo implements Serializable {
private static final long serialVersionUID = -812058443344709898L;
/**
* 推广员唯一ID
*/
@SerializedName("promoter_id")
private String promoterId;

/**
* 推广员视频号昵称
*/
@SerializedName("finder_nickname")
private String finderNickname;
/**
* 推广员openid
*/
@SerializedName("promoter_openid")
private String promoterOpenid;

/**
* 分享员openid
*/
@SerializedName("sharer_openid")
private String sharerOpenid;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package cn.binarywang.wx.miniapp.bean.shop.response;

import cn.binarywang.wx.miniapp.bean.shop.WxMaShopOrderResult;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;

/**
* @author leiin
* @date 2021/3/23
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WxMaShopGetOrderListResponse extends WxMaShopBaseResponse implements Serializable {
private static final long serialVersionUID = -81207907908726897L;

/**
* 订单满足条件的总数
*/
@SerializedName("total_num")
private Integer totalNum;

/**
* 订单列表
*/
@SerializedName("order")
private WxMaShopOrderResult order;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package cn.binarywang.wx.miniapp.bean.shop.response;

import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;

/**
* 生成支付参数响应
*
* @author zhongjun
* @date 2022/5/17
**/
@Data
@EqualsAndHashCode(callSuper = true)
public class WxMaShopGetPaymentParamsResponse extends WxMaShopBaseResponse implements Serializable {
private static final long serialVersionUID = -8796836131438585559L;

@SerializedName("payment_params")
private PaymentParams paymentParams;

@Getter
@Setter
public static class PaymentParams {

private String timeStamp;

private String nonceStr;

@SerializedName("package")
private String packageValue;

private String signType;

private String paySign;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,8 @@ interface Order {
String ORDER_ADD = "https://api.weixin.qq.com/shop/order/add";
String ORDER_PAY = "https://api.weixin.qq.com/shop/order/pay";
String ORDER_GET = "https://api.weixin.qq.com/shop/order/get";
String ORDER_GET_LIST = "https://api.weixin.qq.com/shop/order/get_list";
String ORDER_GET_PAYMENT_PARAMS = "https://api.weixin.qq.com/shop/order/getpaymentparams";
}

interface Register {
Expand Down

0 comments on commit 4de09fa

Please sign in to comment.