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原生打包
然后真机运行,就可以支付了
上一篇:
uniapp开发微信小程序-2.页面制作
下一篇:
如何制作一个实时在线显示评论?