微信JSAPI支付开发说明和注意事项

最近在做一个外包项目,做到微信支付JSAPI的功能,看着官方文档来做的,其中也遇到不少坑的问题。在这里记录一下。我这边所用 的语言是JAVA的。

1.首先要先配置好公众号和商户号的相关配置。

这是公众号相关:

   JS安全域写上自己的域名。

  网页授权域名.

   微信JSAPI支付授权目录,这个目录要精确到页面的上一级。比如www.xxx.com/order/pay.html 这是你的支付目录,这时候我们要写成www.xxx.com/order/这样微信才能读取得到你的目录。再者你的域名必须经过ICP备案咯。这是前提条件。

   在公众号里面可以获取你的appId

 在商户号里获取你的密钥和商户号

这些是下单需要用到东西哈。

详细可以查看官方文档:

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3



2。这些都弄好之后,我们就可以开始来下单,

首先要调用统一下单接口,参考https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

这个有参数说明,有些参数是jSAPI才必须的,这个注意像openId这个就是JSAPI必须的,所以注意看后面的说明。

我们将参数封装成map再进行签名,注意我们sign不参与签名,这里必须和我们的商户KEY拼接签名。可参见

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3签名生成算法。

然后将map转成xml这个可以用工具去实现。

接下来会请求发送到微信的支付接口,这时候可能返回body不是UTF8编码,这说明也很清楚了你的body是中文的。这时候我们需要将我们的body参数转换成UTF8编码,

可以直接用new String(xx.getBytes("UTF-8"))将中文字符转成UTF-8编码。修改之后 我们再发起请求这时候如果出现签名错误说明你的签名算法有问题,自己去找吧。

在成功请求回来,微信给我们返一些我们在页面要发起的支付的数据,接口说明可以看到。

最后我们就要发起支付了,我们找到微信的接口说明

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6

这里面的参数签名不是刚刚下单接口给我们的,这个是我们发起请求的参数再进行签名的。所以不要搞混了。之前我也是因为这个搞了好久。浪费许多时间。

还有注意参数都是字符串的,像时间戳不是整型。不然可能会出现错误。然后我们把代码复制到前端 吧。

注意:onBridgeReady是一进去就会加载,所以我们需要在进行封装一下。再加个方法嵌套一下。需要的时候再调用。

最后就可以发起支付了,注意这是要在域名下面,如果发起支付出现页面未注册,那么就是你前面配置的域名路径有问题咯。

支付成功之后 还有一个回调,回调根据你统一下单的配置的回调地址,微信会访问你这个地址。

可参考https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7

这时候又有个问题了,你这个参数怎么获取。微信给我们的是xml格式的。

我们可以用request的流获取。示例如下:


        InputStream inStream = request.getInputStream();
        ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = inStream.read(buffer)) != -1) {
            outSteam.write(buffer, 0, len);
        }
        outSteam.close();
        inStream.close();
        String result = new String(outSteam.toByteArray(), "utf-8");// 获取微信调用我们notify_url的返回信息

这时我们可以将xml转换成map,然后我们需要验证参数的签名是否一致,我们去掉签名字段,将返回的参数跟上面的一样,加商户KEY进行签名,然后跟微信给我们的签名

进行对比,如果一致才是通过,防止假通知和模拟数据。后面就可以操作业务相关的东西了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值