微信支付--付款到零钱(java后端)

本文介绍了如何使用Java实现微信支付功能,包括配置AppletConfig、加载证书、签名请求和调用REST API,重点在于处理证书和HTTP连接的安全设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

付款到零钱

  • 导入jar
		<dependency>
            <groupId>com.github.wxpay</groupId>
            <artifactId>wxpay-sdk</artifactId>
            <version>0.0.3</version>
        </dependency>
  • 证书
    1、在商户平台申请及配置证书;
    2、将下载的证书解压到服务器上;
public class AppletConfig implements WXPayConfig {

    public static final String APPLET_APP_ID = "app_id";
    public static final String APPLET_KEY = "key";
    public static final String APPLET_MCH_ID = "商户号";
    public static final String APPLET_SECRET = "秘钥";
    private byte[] certData;
    @Override
    public String getAppID() {
        return APPLET_APP_ID;
    }

    @Override
    public String getMchID() {
        return APPLET_MCH_ID;
    }

    @Override
    public String getKey() {
        return APPLET_KEY;
    }
	
	//获取证书
    @Override
    public InputStream getCertStream() {

        String certPath = "证书路径"; //路径指向apiclient_cert.p12文件
        File file = new File(certPath);
        InputStream certStream = null;
        try {
            certStream = new FileInputStream(file);
            this.certData = new byte[(int) file.length()];
            certStream.read(this.certData);
            certStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData);
        return certBis;
    }

    @Override
    public int getHttpConnectTimeoutMs() {
        return 8000;
    }

    @Override
    public int getHttpReadTimeoutMs() {
        return 10000;
    }

}

1、将所需参数进行封装;
2、进行签名(签名方式见上篇);
3、通过WXPayUtil.mapToXml(params)将参数转成xml;
4、付款到零钱发送请求需要携带证书;
携带证书需要密码,密码默认为商户号

public String getRestInstance(String url, String data) throws Exception {

        AppletConfig appletConfig = new AppletConfig();
        char[] password = appletConfig.getMchID().toCharArray();//证书密码
        InputStream certStream = appletConfig.getCertStream();//获取证书的流
        KeyStore ks = KeyStore.getInstance("PKCS12");
        ks.load(certStream, password);

        // 实例化密钥库 & 初始化密钥工厂
        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        kmf.init(ks, password);

        // 创建 SSLContext
        SSLContext sslContext = SSLContext.getInstance("TLS");
        sslContext.init(kmf.getKeyManagers(), null, new SecureRandom());

        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(
                sslContext,
                new String[]{"TLSv1"},
                null,
                SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);

        BasicHttpClientConnectionManager connManager = new BasicHttpClientConnectionManager(
                RegistryBuilder.<ConnectionSocketFactory>create()
                        .register("http", PlainConnectionSocketFactory.getSocketFactory())
                        .register("https", sslConnectionSocketFactory)
                        .build(),
                null,
                null,
                null
        );

        HttpClient httpClient = HttpClientBuilder.create().setConnectionManager(connManager).build();

        HttpPost httpPost = new HttpPost(url);

        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(10000).setConnectTimeout(8000).build();
        httpPost.setConfig(requestConfig);

        StringEntity postEntity = new StringEntity(data, "UTF-8");
        httpPost.addHeader("Content-Type", "text/xml");
        httpPost.addHeader("User-Agent", "This is transfers ");
        httpPost.setEntity(postEntity);

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        return EntityUtils.toString(httpEntity, "UTF-8");
    }

5、接受返回参数,将xml转成map,处理自身业务。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值