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.页面制作
下一篇:
如何制作一个实时在线显示评论?
