收藏
回答

集成微信发票助手,调用“批量获取报销发票信息”接口,一直在报代码为72031,请问怎么解决?

前几步跳转至微信app获取和选择数电发票、回调至数电票系统均正常,但是数电票系统得到回调数据后,根据数据信息调用微信官方api查询时报错,单张获取发票和批量获取发票接口的错误代码均为72031,见下方截图(代码主要逻辑说明见下方代码,参考的微信官方api文档链接地址见本文档末附)。但是微信接口文档中对于这个参数说明太笼统,开发者社区中也未找到解决方案,当前问题没什么线索也不知道该怎么推进了,烦请协助支持! 感谢!!!

附接口文档地址:

https://developers.weixin.qq.com/doc/service/api/invoice/reimburser/api_invoicebxgetinvoice.html  (获取单张发票信息)

https://developers.weixin.qq.com/doc/service/api/invoice/reimburser/api_invoicereimbursegetinvoicebatch.html  (批量获取发票信息)

附主要代码如下:

package com.seconddev.demo.shudianpiao;

import java.util.UUID;
import java.util.Formatter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException;

class GetInvoice {
    public static void main(String[] args) {

		// 涉密信息已隐藏
        // 1、获取token,保存好后续要用
        // curl "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=公众号APPID&secret=公众号APPSecret"

        // 2、根据第一步token,替换到参数中,获取ticket
        // curl "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=95_Mh8u5dnNnNOaYs3I6iSxzfWhgSdSnUdgKcmM25mUS7acd4hAKiCLq3qpD9fHRmViLO_anYyuH00AJcVmHjSGFL2Ml0uvpZbotcCssGZ58E4M3qiAJYXKNox90ZcEQYbAGAZLT&type=wx_card"

        // 3、构建调用发票助手的参数
        // api_ticket为第2步请求返回的数据
        String api_ticket = "m7RQzjA_ljjEkt-JCoklRASszIYmWRSaGDTpTp4TssFx6_j_ymqOxdXFNHHy6w-9QCnopTNYC-7mbieRjnl9-g";
        // 公众号appid
        String appid = "公众号APPID";
        String timestamp = create_timestamp();
        String nonceStr = create_nonce_str();
        String cardType = "INVOICE";
        System.out.println("timestamp: "+timestamp);
        System.out.println("nonceStr: "+nonceStr);
        String sha1Para = api_ticket+appid+timestamp+nonceStr+cardType;
        String cardSign = getSha1(sha1Para);
        System.out.println("sha1Para: "+sha1Para);
        System.out.println("cardSign: "+cardSign);

        // 4、将第三部各个参数,拼接成js语法,放在移动端H5页面中执行,跳转到微信发票助手后,选择发票确认,跳回到H5页面后,会打印出刚选择的发票信息。
        String wxCmd = "wx.invoke(\"chooseInvoice\", {\n" +
                "    \"signType\": \"SHA1\",\n" +
                "    \"cardSign\": \""+cardSign+"\",\n" +
                "    \"timestamp\": \""+timestamp+"\",\n" +
                "    \"nonceStr\": \""+nonceStr+"\"\n" +
                "}, function(res){\n" +
                "    console.warn(res);\n" +
                "});";
        System.out.println("wxCmd: \n"+wxCmd);

        // 5、将第4步中打印的发票信息,替换到下方参数,再把第一步的token放到URL后的参数,请求的结果还是72031,所以到这一步不知道该怎么处理了。
        /* **

        curl \
        -X POST "https://api.weixin.qq.com/card/invoice/reimburse/getinvoiceinfo?access_token=95_Mh8u5dnNnNOaYs3I6iSxzfWhgSdSnUdgKcmM25mUS7acd4hAKiCLq3qpD9fHRmViLO_anYyuH00AJcVmHjSGFL2Ml0uvpZbotcCssGZ58E4M3qiAJYXKNox90ZcEQYbAGAZLT" \
        -H "Content-Type: application/json" -d '{"card_id":"p4gLgvro6c38LZUPaunHDQ-7EKFA","encrypt_code":"O/mPnGTpBu22a1szmK2ogzhFPBh9eYzv2p70L8yzyym1CRfkhxMspMBRj11hxaPiV4c6gjAxpjFpuMw1cbebm3MJqxKn0tOhpJvYY6njIi5JfHipN2vo4GpcSYmF9u+x"}'
         */

    };




    public static String getSha1(String p){
        String signSha1 = "";
        try
        {
            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
            crypt.reset();
            crypt.update(p.getBytes("UTF-8"));
            signSha1= byteToHex(crypt.digest());
        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();


        }
        return signSha1;
    }

    private static String byteToHex(final byte[] hash) {
        Formatter formatter = new Formatter();
        for (byte b : hash)
        {
            formatter.format("%02x", b);
        }
        String result = formatter.toString();
        formatter.close();
        return result;
    }

    private static String create_nonce_str() {
        return UUID.randomUUID().toString();
    }


    private static String create_timestamp() {
        return Long.toString(System.currentTimeMillis() / 1000);
    }
}



最后一次编辑于  2025-09-10
回答关注问题邀请回答
收藏

1 个回答

  • we
    we
    2025-09-10

    请求的时间贴下, 或者重新触发一次, 贴下请求时间和响应的内容

    2025-09-10
    有用
    回复 2
    • speeder
      speeder
      2025-09-11
      不好意思刚看到,我复现了下,时间戳大概是今天10:51:27,请求和响应内容见截图中CURL请求
      2025-09-11
      回复
    • 许眉书
      许眉书
      01-20
      请问解决了吗
      01-20
      回复
登录 后发表内容