收藏
回答

写微信支付统一订单的时候出现了无效的openid

@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>)


回答关注问题邀请回答
收藏

2 个回答

  • 支付社区运营
    支付社区运营
    9小时前

    获取openid参考这个https://pay.weixin.qq.com/doc/v3/merchant/4012068676

    openid需要和接口中对应的应用id appid匹配。如传的小程序appid要通过小程序获取openid,传的公众号appid要通过公众号获取appid

    9小时前
    有用
    回复
  • Memory
    Memory
    发表于小程序端
    1天前

    openid需要是你请求参数中appid下获取的真实openid才可以,报错这个说明openid给的不对,如果是其他appid下获取的有效openic会报错appid和openid不匹配,你这个报错说明该openid不是任何一个appid下的有效openid

    1天前
    有用
    回复
登录 后发表内容