java调用微信小程序支付。适合小白直接上手

很叼的一个菜鸟 2019-11-01 09:23:27
java调用微信小程序支付、看这个就够了,官方文档弄了我几天快死了,后来看了一个大哥的博客,修改了点东西(非常适合小白)
不多说直接上代码。小白复制替换自己的参数即可运行。

pom.xml

<!--微信支付-->
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
</dependency>



java代码
 /*
* 获取微信支付参数
*/
@RequestMapping(value = "/VxPay", method = RequestMethod.POST)
@ResponseBody
public JSONObject VxPay(
HttpServletRequest httpRequest,
HttpServletResponse httpResponse,
HttpServletRequest request
) throws Exception {
JSONObject retu = new JSONObject();
String openId = request.getParameter("openId"); //用户微信id
String orderId = request.getParameter("orderId"); //订单id
String money = request.getParameter("money"); //要支付的价格
String appId = "**************";
Map<String, Object> map=new HashMap<>();
//如果商品类型为1 那就是向钱包充值
MyConfig config = new MyConfig();
WXPay wxpay = new WXPay(config);
Map<String, String> data = new HashMap<String, String>();
data.put("body", "***"); //付款说明
data.put("out_trade_no", orderId); //商户订单号
//微信那边是分所以乘100
String fee = "1";
data.put("total_fee", fee); //付款的钱
data.put("spbill_create_ip", request.getRemoteAddr());
data.put("notify_url", "http://******");//回调地址 必须公网可以访问
data.put("trade_type", "JSAPI"); // 此处指定支付类型 JSAPI小程序支付 NATIVE扫码支付
data.put("openid", openId); // 此处指定支付类型 JSAPI小程序支付 todo 记得该
try {
Map<String, String> resp = wxpay.unifiedOrder(data);//这里是封装好的 把东西发给微信
Map<String, String> reqData=new HashMap<String, String>();
System.out.println("下单成功");
System.out.println(resp); //首次获取回调数据
//下面的参数官文有解释
String timeStamp=""+System.currentTimeMillis()/1000; //返回的要是秒级别
String nonceStr=resp.get("nonce_str");
String Package=resp.get("prepay_id");
String signType="MD5";
map.put("total_fee","1");
map.put("appId",appId);
map.put("timeStamp",timeStamp);
map.put("nonce_str",nonceStr);
map.put("prepay_id",Package);
map.put("signType",signType);
reqData.put("appId","********************"); //二次签名所用的参数
reqData.put("timeStamp",timeStamp);
reqData.put("nonceStr",nonceStr);
reqData.put("package","prepay_id="+Package);
reqData.put("signType",signType);
String key = "***************"; //商户号秘钥
map.put("sign", WXPayUtil.generateSignature(reqData, key, SignType
.MD5));//第二次生成sigh 同样用封装好的
System.out.println("map");
System.out.println(map); //这里的map是直接给前端用即可,下面的状态是我和我的前端的对接标识
retu.put("status", true);
retu.put("data", map);
return retu;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}


原文链接:https://blog.csdn.net/xu505928168/article/details/95635333
...全文
64 1 打赏 收藏 举报
写回复
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
可以的,再封账、分层一下就更好了
  • 打赏
  • 举报
回复
发帖
非技术区

2.3w+

社区成员

Java 非技术区
社区管理员
  • 非技术区社区
加入社区
帖子事件
创建了帖子
2019-11-01 09:23
社区公告
暂无公告