收藏
回答

apiV3 使用wechatpay-java例子 报商户号该产品权限未开通,怎么才算开通?

1、已申请小程序

2、已申请商户号

3、小程序以绑定商户号

4、商户号已开通JSAPI支付、Native支付、付款码支付

在这种情况下,还是报该商户号权限未开通,到底还要怎样才能开通?

这是官方的例子,其中出现了两个商户号 merchantId和mchid 这两个是否指的同一个微信商户的id,如果不是这两个参数指的是什么 从哪里获取?

另外notifyUrl是什么 商品的地址么? 有什么要求?

刚接触微信支付,还望有经验的各位前辈可以给予指导,谢谢

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

2 个回答

  • Memory
    Memory
    2023-05-26

    请求的什么接口?具体的报错贴出来

    2023-05-26
    有用 1
    回复 4
    • JM
      JM
      2023-05-26
      请求接口:https://api.mch.weixin.qq.com/v3/pay/transactions/native
      2023-05-26
      回复
    • JM
      JM
      2023-05-26
      这样可以么 报错信息后面似乎有 小程序id 和 商户号id 就没有都发出来
      2023-05-26
      回复
    • Memory
      Memory
      2023-05-26回复JM
      你需要商户后台->产品中心开通native支付
      2023-05-26
      回复
    • JM
      JM
      2023-05-26
      好的感谢
      2023-05-26
      回复
  • JM
    JM
    2023-05-26
    /** 商户号 */
    @Value("${webCart.merchantId}")
    private  String merchantId ;
    /** 商户API私钥路径 */
    @Value("${webCart.privateKeyPath}")
    private String privateKeyPath ;
    /** 商户证书序列号 */
    @Value("${webCart.merchantSerialNumber}")
    private String merchantSerialNumber ;
    /** 商户APIV3密钥 */
    @Value("${webCart.apiV3key}")
    private String apiV3key;
    
    private static Config config;
    
    public  PrepayResponse main() {
        // 构建service
        NativePayService service = new NativePayService.Builder().config(config).build();
        // request.setXxx(val)设置所需参数,具体参数可见Request定义
        PrepayRequest request = new PrepayRequest();
        Amount amount = new Amount();
        amount.setTotal(100);
        request.setAmount(amount);
        request.setAppid("wxxxxxxxxxxxxxxxc");
        request.setMchid("16xxxxxx93");
        request.setDescription("测试商品标题");
        request.setNotifyUrl("https://notify_url");
        request.setOutTradeNo("out_trade_no_001");
        // 调用下单方法,得到应答
        PrepayResponse response = service.prepay(request);
        // 使用微信扫描 code_url 对应的二维码,即可体验Native支付
        System.out.println(response.getCodeUrl());
        return response;
    }
    @PostConstruct
    private void init(){
        // 使用自动更新平台证书的RSA配置
        // 一个商户号只能初始化一个配置,否则会因为重复的下载任务报错
         config =
                new RSAAutoCertificateConfig.Builder()
                        .merchantId(merchantId)
                        .privateKeyFromPath(PathUtil.getPath(privateKeyPath))
                        .merchantSerialNumber(merchantSerialNumber)
                        .apiV3Key(apiV3key)
                        .build();
    }
    //修改后
    // 构建service
    JsapiService service = new JsapiService.Builder().config(config).build();
    // request.setXxx(val)设置所需参数,具体参数可见Request定义
    PrepayRequest request = new PrepayRequest();
    Amount amount = new Amount();
    amount.setTotal(100);
    Payer payer = new Payer();
    payer.setOpenid("oKxxxxxxxx-xxxxxxxxxxx");
    request.setAmount(amount);
    request.setAppid("wxxxxxxx71xxxxxx2c");
    request.setMchid("1xxxxxxxxxx3");
    request.setDescription("测试商品标题");
    request.setNotifyUrl("https://notify_url");
    request.setOutTradeNo("out_trade_no_001");
    request.setPayer(payer);
    // 调用下单方法,得到应答
    PrepayResponse response = service.prepay(request);
    // 使用微信扫描 code_url 对应的二维码,即可体验Native支付
    /*System.out.println(response.getCodeUrl());*/
    return response;
    
    2023-05-26
    有用
    回复 2
    • JM
      JM
      2023-05-26
      这是我通过官方的例子,和实际使用的情况修改的代码
      2023-05-26
      回复
    • JM
      JM
      2023-05-26
      通过Memory的询问发现调用的是Native支付,观察了一下代码
        // 调用下单方法,得到应答
              PrepayResponse response = service.prepay(request)
      这个方法的service 决定了 是使用什么支付,随即改成了
        // 构建service
              JsapiService service = new JsapiService.Builder().config(config).build();
      通过JsApi的方式支付,再根据Jsapi的官方文档https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_1.shtml
      添加了用户唯一表示 openid ,随即请求成功
      2023-05-26
      回复
登录 后发表内容