@Service
@Slf4j
public class PayServiceImpl implements PayService {
@Autowired
private WxPayService wxPayService;
@Override
public void create(OrderDTO orderDTO, HttpServletRequest request) {
try {
WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();
orderRequest.setBody(orderDTO.getShopName());
orderRequest.setOutTradeNo(orderDTO.getOrderNo());
orderRequest.setTotalFee(BaseWxPayRequest.yuanToFen(orderDTO.getOrderAmount().toString()));//元转成分
orderRequest.setOpenid(orderDTO.getUserOpenId());
orderRequest.setSpbillCreateIp(IPUtils.getIpAddr(request));
orderRequest.setTradeType(WxPayConstants.TradeType.JSAPI);
Object order = wxPayService.createOrder(orderRequest);
log.info("统一下单成功!订单号:{},结果:{}", orderDTO.getOrderNo(), order);
wxPayService.createOrder(orderRequest);
} catch (Exception e) {
log.error("统一下单失败!订单号:{},原因:{}", orderDTO.getOrderNo(), e.getMessage());
e.printStackTrace();
}
}
}
@SpringBootTest
@Slf4j
public class PayTest {
@Autowired
private PayService payService;
@Autowired
private OrderService orderService;
@Autowired
private Order order;
@Test
public void test() {
OrderDTO order = orderService.findOne("1739868252071462954");
payService.create(order, new MockHttpServletRequest());
}
然后就爆出了下面这个错误,我修改了做测试用的数据库的openid,格式也正确,如何拯救呐
WxPayException(customErrorMsg=null, returnCode=SUCCESS, returnMsg=OK, resultCode=FAIL, errCode=PARAM_ERROR, errCodeDes=无效的openid, xmlString=<xml><return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<result_code><![CDATA[FAIL]]></result_code>
<err_code_des><![CDATA[无效的openid]]></err_code_des>
<err_code><![CDATA[PARAM_ERROR]]></err_code>
<mch_id><![CDATA[1572824121]]></mch_id>
<appid><![CDATA[wx32b98899abc39751]]></appid>
<nonce_str><![CDATA[jQUK1OLvgTP0VmlH]]></nonce_str>
<sign><![CDATA[CCFA4D202C3D82BCE93E87C1A3691BEF]]></sign>
</xml>)
获取openid参考这个https://pay.weixin.qq.com/doc/v3/merchant/4012068676
openid需要和接口中对应的应用id appid匹配。如传的小程序appid要通过小程序获取openid,传的公众号appid要通过公众号获取appid
openid需要是你请求参数中appid下获取的真实openid才可以,报错这个说明openid给的不对,如果是其他appid下获取的有效openic会报错appid和openid不匹配,你这个报错说明该openid不是任何一个appid下的有效openid