java+uniapp对接app微信支付

java+uniapp对接app微信支付

1.准备工作

注册app

一、登录,进入【管理中心 → 移动应用 → 创建移动应用】;

二、完成基本信息的录入,商户需要在本步骤提交APP对应的下载地址,应用官网,应用水印,icon等业务信息;

三、完成平台信息的录入,商户需要在本步骤提交APP在Android及iOS端对应的开发参数,包括Android端应用的包名,应用签名,iOS端应用的bundle ID, universal link等;

注意:

    Android应用包名和签名的相关说明,参考“”。

四、以上信息全部提交完成后,即完成APP的注册,商户可在【管理中心 → 移动应用】中,选择具体的应用查看其APPID及已获得的接口能力;

五、获取到APP的APPID后,需要将该APPID与商户的收款mch_id进行绑定,商户可登录商户平台后前往【产品中心 -> AppID账号管理】界面中进行AppID的绑定及管理,界面如图所示:

2.业务流程

重点步骤说明:

商户调用后,分正常返回和异常返回情况:

    正常返回:返回prepay_id,商户可根据返回的prepay_id来生成调用OpenSDK的签名以执行下一步。 异常返回:返回http code或错误码,商户可根据 或来排查原因并执行下一步操作

步骤15-19: 用户支付成功后,商户可通过以下两种方式获取订单状态

我们通过以下接口将用户确认订单信息回调通知给商户系统:

*方法二:*当因网络抖动或本身notify_url存在问题等原因,导致无法接收到回调通知时,商户也可主动调用 查询订单API来获取订单状态

3.工具类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class PrePayVo {
          
   
    private String appid;
    private String partnerid;
    private String prepayid;
//    private String package;
    private String noncestr;
    private long timestamp;
    private String sign;

}

签名工具类

package com.jdzh.enterprise.admin.controller.pay;

/**
 * @author Heb
 * @version 1.0
 * @description: TODO
 * @date 2023/2/21 14:33
 */
import java.security.MessageDigest;
import java.util.*;

public class WechatPaySignUtil {
          
   

    /**
     * 对参数进行签名
     * @param params 待签名的参数
     * @param key API密钥
     * @return 签名结果
     */
    public static String sign(Map<String, String> params, String key) {
          
   
        // 按照参数名ASCII码从小到大排序
        List<String> keys = new ArrayList<String>(params.keySet());
        Collections.sort(keys);

        // 拼接参数名和参数值
        StringBuilder sb = new StringBuilder();
        for (String k : keys) {
          
   
            String v = params.get(k);
            if (v != null && !"".equals(v.trim())) {
          
   
                sb.append(k).append("=").append(v.trim()).append("&");
            }
        }
        sb.append("key=").append(key);

        // 对字符串进行MD5加密
        try {
          
   
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] bytes = md.digest(sb.toString().getBytes("UTF-8"));
            String sign = bytesToHexString(bytes).toUpperCase();
            return sign;
        } catch (Exception e) {
          
   
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 将字节数组转换为十六进制字符串
     * @param bytes 字节数组
     * @return 十六进制字符串
     */
    private static String bytesToHexString(byte[] bytes) {
          
   
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
          
   
            String hex = Integer.toHexString(b & 0xFF);
            if (hex.length() == 1) {
          
   
                sb.append("0");
            }
            sb.append(hex);
        }
        return sb.toString();
    }

    public static void main(String[] args) {
          
   
       Map<String, String> params = new HashMap<String, String>();
        params.put("appid", "");
        String key = "";//api2秘钥
        /**
         * 一次签名
         * ------------------------------
         */
//        params.put("nonce_str", "");
//        params.put("attach","");
//        params.put("body", "");
//        params.put("mch_id", "");
//        params.put("notify_url", "");
//        params.put("out_trade_no", "");
//        params.put("total_fee", "");
//        params.put("spbill_create_ip", "");
//        params.put("trade_type", "");

///**
// * 二次签名
// * ------------------------------
// */
        params.put("partnerid","");
        params.put("prepayid","");
        params.put("package","Sign=WXPay");
        params.put("noncestr", "FOBvoTUvG8sM5lMvYrYofUdhmYUSDGRw");
        params.put("timestamp","1677135129641");


        String sign = WechatPaySignUtil.sign(params, key);
        System.out.println("sign = " + sign);
        params.put("sign", sign);
    }

}

4.后端代码

5.前端代码

6.将项目打包

点击发行-app原生打包

然后真机运行,就可以支付了

经验分享 程序员 微信小程序 职场和发展