java实现APP端微信支付

最近实现了APP端微信支付的功能(下单、支付、查询订单、退款、退款查询),记录一下遇到的问题。

一、微信支付接口地址:

app微信支付: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_3

二、签名的坑:

注意:1. 后台请求微信的参数都是用 “_” 分割的:

java实现APP端微信支付_第1张图片

比如:统一下单请求是后台发起的, 这个参数名在签名的时候,参数名都是 用 “_” 分割形式的。

2. APP端请求参数的参数名是不含有 “_” 的,并且全部小写。

java实现APP端微信支付_第2张图片

比如: 调起支付的请求是在APP端向微信发起请求的,但是签名是后台根据统一下单的返回结果,在后台完成的。

这个时候参数名称,也要全部小写,并且不带 “_”

三、 关于支付接口回调、 退款接口的回调:

可以暴露两个服务的接口来接收回调的数据, 

支付结果通知 :  用于验证支付是否成功

退款结果通知:   用于验证退款是否成功

四、 关于申请退款:

这个接口是需要证书的。事先在卖家商户平台下载好微信支付的证书。

  private static WXPayRequest getWXPayRequestInstance() throws Exception {
        return new WXPayRequest(new WXPayConfig() {

            public String getAppID() {
                return WxCommonConstant.APP_ID;
            }


            public String getMchID() {
                return WxCommonConstant.MCH_ID;
            }


            public String getKey() {
                return WxCommonConstant.KEY;
            }


            public InputStream getCertStream() throws FileNotFoundException {
                File file = new File(WxCommonConstant.APICLIENT_CERT_PATH);
                return new FileInputStream(file);
            }


            public IWXPayDomain getWXPayDomain() {
                return new IWXPayDomain() {

                    public void report(String domain, long elapsedTimeMillis, Exception ex) {
                        System.out.println("==================== report begin ===================");
                        System.out.println(domain);
                        System.out.println(elapsedTimeMillis);
                        System.out.println(ex);
                        System.out.println("==================== report end ===================");
                    }

                    public DomainInfo getDomain(WXPayConfig config) {
                        return new DomainInfo(WXPayConstants.DOMAIN_API, true);
                    }
                };
            }
        });
    }

在微信配置对象中, 通过返还一个包含证书的输入流,设置进去的。

你可能感兴趣的:(java,java)