微信支付--小程序支付(java后端)

小程序微信支付

所需工具类及jar包

  • 导入微信官方工具包
    1、可以验证签名;
    2、map转xml以及xml转map等方法;
<dependency>
    <groupId>com.github.wxpay</groupId>
    <artifactId>wxpay-sdk</artifactId>
    <version>0.0.3</version>
</dependency>
  • 签名方法
import com.github.wxpay.sdk.WXPayConstants;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;

public class WxMD5Util {
    public String getSign(Map<String, String> data) throws Exception {
        WXConfigUtil config = new WXConfigUtil();
        Set<String> keySet = data.keySet();
        String[] keyArray = keySet.toArray(new String[keySet.size()]);
        Arrays.sort(keyArray);
        StringBuilder sb = new StringBuilder();
        for (String k : keyArray) {
            if (k.equals(WXPayConstants.FIELD_SIGN)) {
                continue;
            }
//            if (data.get(k).trim().length() > 0) // 参数值为空,则不参与签名
//                sb.append(k).append("=").append(data.get(k).trim()).append("&");

            if (data.get(k).trim().length() > 0) { // 参数值为空,则不参与签名
                sb.append(k).append("=").append(data.get(k).trim()).append("&");
            }


        }
        sb.append("key=").append(config.getKey());
        MessageDigest md = null;
        try {
            md = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        byte[] array = new byte[0];
        try {
            array = md.digest(sb.toString().getBytes("UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        StringBuilder sb2 = new StringBuilder();
        for (byte item : array) {
            sb2.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
        }
        return sb2.toString().toUpperCase();
    }
}

统一下单

  • 官方文档地址:
    https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1

1、按照官方文档封装所需参数;
2、小程序支付openid必传
3、使用WXPayUtil.mapToXml,将参数转成xml,发送POST请求;
4、处理返回参数,如果返回成功,将返回预支付交易会话标志 prepay_id,封装所需数据返回给小程序端;

支付回调

  • 官方文档地址:
    https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7&index=8#

1、接收微信回调xml参数,并将xml参数转成map

String resXml = "";
        Map<String, String> returnMap = new HashMap<>();
        try {
            InputStream inputStream = request.getInputStream();
            //将InputStream转换成xmlString
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuilder sb = new StringBuilder();
            String line = null;
            try {
                while ((line = reader.readLine()) != null) {
                    sb.append(line + "\n");
                }
            } catch (IOException e) {
                System.out.println(e.getMessage());
            } finally {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            resXml = sb.toString();

            Map<String, String> params = WXPayUtil.xmlToMap(resXml);

2、验证签名

boolean signatureValid = WXPayUtil.isSignatureValid(params, 你的APPLET_KEY);

3、根据回调参数,处理自身的业务之后,需向微信支付返回参数,否则微信会在一段时间内调用回调接口,间歇性进行通知
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值