spring boot 微信-boot可以开发微信支付吗

\ 10行代码搞定微信支付(Java版)
10行代码搞定微信支付(Java版)
JAVA开发工程师
载着干货的老司机。微服务,分布式架构方面经验丰富。
作者的热门手记
微信支付痛点
对于大多数同学来说,要开发微信支付可不简单。附上微信支付官方文档https://pay./wiki/doc/api/index.html
从文档上可以看出,你需要解决很多问题,我就随便挑几个吧。
xml与对象的互转, 微信使用xml格式而不使用json通信, 也确实有点奇葩
签名,千万不要以为只是MD5一下,要是你自己开发,我敢说,你60%的时间都耗在签名调试这一块
微信支付到底需要做什么
以上是微信公众账号支付的时序图,简单概括为2个点。
下单,发起支付
接收异步通知,修改订单的支付状态
下单和修改支付状态是用户的业务系统干的事,我们来说说如何快速发起支付和接收异步通知
可能是目前最好的支付SDK
这是一款支付SDK,支付账号借用请往下看,
best-pay-sdk, 项目主页 ,有了它你接入支付的代码只需要像下面一样
//微信公众账号支付配置
WxPayH5Config wxPayH5Config = new WxPayH5Config();
wxPayH5Config.setAppId("xxxxx");
wxPayH5Config.setAppSecret("xxxxxxxx");
wxPayH5Config.setMchId("xxxxxx");
wxPayH5Config.setMchKey("xxxxxxx");
wxPayH5Config.setNotifyUrl("http://xxxxx");
//支付类, 所有方法都在这个类里
BestPayServiceImpl bestPayService = new BestPayServiceImpl();
bestPayService.setWxPayH5Config(wxPayH5Config);
//发起支付
bestPayService.pay();
//异步回调
bestPayService.asyncNotify();
去掉注释和空行,刚好10行!更多使用,请访问/Pay-Group/best-pay-sdk
相关标签:
本文原创发布于慕课网 ,转载请注明出处,谢谢合作!
请登录后,发表评论
评论(Enter+Ctrl)
评论加载中...
评论加载中...
Copyright (C)
All Rights Reserved | 京ICP备 号-2由于微信支付接口更新,本文档已过期,请查看新版微信支付JS API支付教程。地址&
本文介绍如何使用JS API支付接口完成微信支付。
一、JS API支付接口(getBrandWCPayRequest)
微信JS API只能在微信内置浏览器中使用,其他浏览器调用无效。微信提供getBrandWCPayRequest接口供商户前端网页调用,调用之前微信会鉴定商户支付权限,若商户具有调起支付的权限,则将开始支付流程。这里主要介绍支付前的接口调用规则,支付状态消息通知机制请参加下文。接口需要注意:所有传入参数都是字符串类型!
getBrandWCPayRequest参数如表6-5所示。
字符串类型
商户注册具有支付权限的公众号成功后即可获得;
字符串类型,32个字节以下
商户生成,从日00:00:00至今的秒数,即当前的时间,且最终需要转换为字符串形式;
随机字符串
字符串类型,32个字节以下
商户生成的随机字符串;
订单详情扩展字符串
字符串类型,4096个字节以下
商户将订单信息组成该字符串,具体组成方案参见接口使用说明中package组包帮劣;由商户按照规范拼接后传入;
字符串类型,参数取值"SHA1"
按照文档中所示填入,目前仅支持SHA1;
字符串类型
商户将接口列表中的参数按照指定方式迚行签名,签名方式使用signType中标示的签名方式,具体签名方案参见接口使用说明中签名帮劣;由商户按照规范签名后传入;
表6-5 getBrandWCPayRequest参数
&&& getBrandWCPayRequest返回值如表6-6所示。
get_brand_wcpay_request:ok& 支付成功
get_brand_wcpay_request:cancel 支付过程中用户取消
get_brand_wcpay_request:fail 支付失败
表6-6 getBrandWCPayRequest返回值
JS API的返回结果 get_brand_wcpay_request:ok 仅在用户成功完成支付时返回。由于前端交互复杂,get_brand_wcpay_request:cancel
get_brand_wcpay_request:fail 可以统一处理为用户遇到错误或者主动放弃,不必细化区分。
二、JS API支付实现
下面代码是微信官方提供的JS API支付demo
2 include_once("WxPayHelper.php");
5 $commonUtil = new CommonUtil();
6 $wxPayHelper = new WxPayHelper();
9 $wxPayHelper-&setParameter("bank_type", "WX");
10 $wxPayHelper-&setParameter("body", "test");
11 $wxPayHelper-&setParameter("partner", "");
12 $wxPayHelper-&setParameter("out_trade_no", $commonUtil-&create_noncestr());
13 $wxPayHelper-&setParameter("total_fee", "1");
14 $wxPayHelper-&setParameter("fee_type", "1");
15 $wxPayHelper-&setParameter("notify_url", "htttp://");
16 $wxPayHelper-&setParameter("spbill_create_ip", "127.0.0.1");
17 $wxPayHelper-&setParameter("input_charset", "GBK");
22 &script language="javascript"&
23 function callpay()
WeixinJSBridge.invoke('getBrandWCPayRequest',&?php echo $wxPayHelper-&create_biz_package(); ?&,function(res){
WeixinJSBridge.log(res.err_msg);
alert(res.err_code+res.err_desc+res.err_msg);
30 &/script&
32 &button type="button" onclick="callpay()"&wx pay test&/button&
33 &/body&
34 &/html&
将其中的微信支付参数修改成自己所申请得到的,然后将网页上传到微信支付目录下,给测试账号回复该网页地址。用户就可以实现一次JS API支付。
三、效果演示
下面是官方DEMO修改后,发起支付的页面图。
输入支付密码
阅读(...) 评论()微信支付 java 服务端demo (v3版本app支付 springMVC框架中)_Java编程-织梦者
当前位置:&>&&>& > 微信支付 java 服务端demo (v3版本app支付 springMVC框架中)
微信支付 java 服务端demo (v3版本app支付 springMVC框架中)
//静态资源
* @author 徐小骥
* @version : 上午11:43:48
public class WeixinPayConstants {
public static final String appid = &XXXXXX&;//在微信开发平台登记的app应用
public static final String appsecret = &XXXXXXXXX&;
public static final String partner = &XXXXXXXXX&;//商户号
public static final String partnerkey =&XXXXXXXXXXXXXXXXXXXXXXXXXXXXX&;//不是商户登录密码,是商户在微信平台设置的32位长度的api秘钥,
public static final String createOrderURL=&https://api.mch./pay/unifiedorder&;
public static final String backUri=&http://XXXXXXXX/api/weixin/topay.jhtml&;//微信支付下单地址
public static final String notify_url=&http://XXXXXXXXXX/api/weixin/notify.jhtml&;//异步通知地址
* @author 徐小骥
* @version : 上午11:46:48
@Controller(&weixinPayController&)
@RequestMapping(&/api/weixin&)
public class WeixinPayController {
@Resource(name = &memberServiceImpl&)
private MemberService memberS
@Resource(name = &orderServiceImpl&)
private RecordsConsumptionService
recordsConsumptionS
//商户相关资料
private static String appid = WeixinPayConstants.
private static String appsecret = WeixinPayConstants.
private static String partner = WeixinPayConstants.
private static String partnerkey = WeixinPayConstants.
@RequestMapping(value = &/topay&)
@ResponseBody public void topay(HttpServletRequest request,HttpServletResponse response) throws Exception{
request.setCharacterEncoding(&UTF-8&);
response.setCharacterEncoding(&UTF-8&);
response.setContentType(&text/charset=UTF-8&);
String orderNo= request.getParameter(&Orderid&);
String mobile= request.getParameter(&mobile&);
PrintWriter out = response.getWriter();
String json=
JSONObject retMsgJson=new JSONObject();
if(orderNo==null||mobile==null){
retMsgJson.put(&msg&, &error&);
retMsgJson.put(&body&, &数据请求异常&);
json=retMsgJson.toString();
out.write(json);
out.close();
Member member=memberService.findListByMobile(mobile);//获取用户数据
Order order=orderService.find(Long.valueOf(orderNo));//获取订单数据
//验证订单与支付会员关系
if(member==null||order==null){
retMsgJson.put(&msg&, &error&);
retMsgJson.put(&body&, &数据请求异常&);
json=retMsgJson.toString();
out.write(json);
out.close();
if(!order.getMember().equals(member)){
retMsgJson.put(&msg&, &error&);
retMsgJson.put(&body&, &无权限处理订单&);
json=retMsgJson.toString();
out.write(json);
out.close();
if(!order.getPaymentStatus().equals(Order.PaymentStatus.unpaid)){
retMsgJson.put(&msg&, &error&);
retMsgJson.put(&body&, &订单状态异常&);
json=retMsgJson.toString();
out.write(json);
out.close();
String userId = member.getId().toString();
String money = order.getAmount().toString();//获取订单金额
//金额转化为分为单位
float sessionmoney = Float.parseFloat(money);
String finalmoney = String.format(&%.2f&, sessionmoney);
finalmoney = finalmoney.replace(&.&, &&);
String currTime = TenpayUtil.getCurrTime();
String strTime = currTime.substring(8, currTime.length());
//四位随机数
String strRandom = TenpayUtil.buildRandom(4) + &&;
//10位序列号,可以自行调整。
String strReq = strTime + strR
String mch_id =
//子商户号
//String sub_mch_id=&&;
String device_info=&&;
String nonce_str = strR
String body = order.getName();
//附加数据
String attach = userId;
//商户订单号
String out_trade_no = order.getSn()+&|&+System.currentTimeMillis();//订单编号加时间戳
int intMoney = Integer.parseInt(finalmoney);
//总金额以分为单位,不带小数点
String total_fee = String.valueOf(intMoney);
//订单生成的机器 IP
String spbill_create_ip = request.getRemoteAddr();
String notify_url =WeixinPayConstants.notify_//微信异步通知地址
String trade_type = &APP&;//app支付必须填写为APP
//对以下字段进行签名
SortedMap&String, String& packageParams = new TreeMap&String, String&();
packageParams.put(&appid&, appid);
packageParams.put(&attach&, attach);
packageParams.put(&body&, body);
packageParams.put(&mch_id&, mch_id);
packageParams.put(&nonce_str&, nonce_str);
packageParams.put(&notify_url&, notify_url);
packageParams.put(&out_trade_no&, out_trade_no);
packageParams.put(&spbill_create_ip&, spbill_create_ip);
packageParams.put(&total_fee&, total_fee);
packageParams.put(&trade_type&, trade_type);
RequestHandler reqHandler = new RequestHandler(request, response);
reqHandler.init(appid, appsecret, partnerkey);
String sign = reqHandler.createSign(packageParams);//获取签名
String xml=&&xml&&+
&&appid&&+appid+&&/appid&&+
&&attach&&+attach+&&/attach&&+
&&body&&![CDATA[&+body+&]]&&/body&&+
&&mch_id&&+mch_id+&&/mch_id&&+
&&nonce_str&&+nonce_str+&&/nonce_str&&+
&&notify_url&&+notify_url+&&/notify_url&&+
&&out_trade_no&&+out_trade_no+&&/out_trade_no&&+
&&spbill_create_ip&&+spbill_create_ip+&&/spbill_create_ip&&+
&&total_fee&&+total_fee+&&/total_fee&&+
&&trade_type&&+trade_type+&&/trade_type&&+
&&sign&&+sign+&&/sign&&+
String allParameters = &&;
allParameters =
reqHandler.genPackage(packageParams);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
String createOrderURL = WeixinPayConstants.createOrderURL;
String prepay_id=&&;
prepay_id = new GetWxOrderno().getPayNo(createOrderURL, xml);
if(prepay_id.equals(&&)){
retMsgJson.put(&msg&, &error&);
json=retMsgJson.toString();
out.write(json);
out.close();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
//获取到prepayid后对以下字段进行签名最终发送给app
SortedMap&String, String& finalpackage = new TreeMap&String, String&();
String timestamp = Sha1Util.getTimeStamp();
finalpackage.put(&appid&, appid);
finalpackage.put(&timestamp&, timestamp);
finalpackage.put(&noncestr&, nonce_str);
finalpackage.put(&partnerid&, WeixinPayConstants.partner);
finalpackage.put(&package&, &Sign=WXPay&);
finalpackage.put(&prepayid&, prepay_id);
String finalsign = reqHandler.createSign(finalpackage);
retMsgJson.put(&msg&, &ok&);
retMsgJson.put(&appid&, appid);
retMsgJson.put(&timestamp&, timestamp);
retMsgJson.put(&noncestr&, nonce_str);
retMsgJson.put(&partnerid&, WeixinPayConstants.partner);
retMsgJson.put(&prepayid&, prepay_id);
retMsgJson.put(&package&, &Sign=WXPay&);
retMsgJson.put(&sign&, finalsign);
json=retMsgJson.toString();
out.write(json);
out.close();
//微信异步通知
@RequestMapping(value = &/notify&)
@ResponseBody public void notify(HttpServletRequest request,HttpServletResponse response) throws Exception{
request.setCharacterEncoding(&UTF-8&);
response.setCharacterEncoding(&UTF-8&);
response.setContentType(&text/charset=UTF-8&);
response.setHeader(&Access-Control-Allow-Origin&, &*&);
InputStream in=request.getInputStream();
ByteArrayOutputStream out=new ByteArrayOutputStream();
byte[] buffer =new byte[1024];
int len=0;
while((len=in.read(buffer))!=-1){
out.write(buffer, 0, len);
out.close();
in.close();
String msgxml=new String(out.toByteArray(),&utf-8&);//xml数据
System.out.println(msgxml);
new GetWxOrderno().doXMLParse(msgxml);
String result_code=(String) map.get(&result_code&);
String out_trade_no
= (String) map.get(&out_trade_no&);
String total_fee
= (String) map.get(&total_fee&);
String sign
= (String) map.get(&sign&);
Double amount=new Double(total_fee)/100;//获取订单金额
String attach= (String) map.get(&attach&);
String sn=out_trade_no.split(&\\|&)[0];//获取订单编号
Long memberid=Long.valueOf(attach);
Member member=memberService.find(memberid);
Order order=orderService.findBySn(sn);
if(result_code.equals(&SUCCESS&)&&member!=null&&order!=null){
//验证签名
float sessionmoney = Float.parseFloat(order.getAmount().toString());
String finalmoney = String.format(&%.2f&, sessionmoney);
finalmoney = finalmoney.replace(&.&, &&);
int intMoney = Integer.parseInt(finalmoney);
//总金额以分为单位,不带小数点
String order_total_fee = String.valueOf(intMoney);
String fee_type
= (String) map.get(&fee_type&);
String bank_type
= (String) map.get(&bank_type&);
String cash_fee
= (String) map.get(&cash_fee&);
String is_subscribe
= (String) map.get(&is_subscribe&);
String nonce_str
= (String) map.get(&nonce_str&);
String openid
= (String) map.get(&openid&);
String return_code
= (String) map.get(&return_code&);
String sub_mch_id
= (String) map.get(&sub_mch_id&);
String time_end
= (String) map.get(&time_end&);
String trade_type
= (String) map.get(&trade_type&);
String transaction_id
= (String) map.get(&transaction_id&);
//需要对以下字段进行签名
SortedMap&String, String& packageParams = new TreeMap&String, String&();
packageParams.put(&appid&, appid);
packageParams.put(&attach&, order.getMember().getId().toString()); //用自己系统的数据:会员id
packageParams.put(&bank_type&, bank_type);
packageParams.put(&cash_fee&, cash_fee);
packageParams.put(&fee_type&, fee_type);
packageParams.put(&is_subscribe&, is_subscribe);
packageParams.put(&mch_id&, partner);
packageParams.put(&nonce_str&, nonce_str);
packageParams.put(&openid&, openid);
packageParams.put(&out_trade_no&, out_trade_no);
packageParams.put(&result_code&, result_code);
packageParams.put(&return_code&, return_code);
packageParams.put(&sub_mch_id&, sub_mch_id);
packageParams.put(&time_end&, time_end);
packageParams.put(&total_fee&, order_total_fee); //用自己系统的数据:订单金额
packageParams.put(&trade_type&, trade_type);
packageParams.put(&transaction_id&, transaction_id);
RequestHandler reqHandler = new RequestHandler(request, response);
reqHandler.init(appid, appsecret, partnerkey);
String endsign = reqHandler.createSign(packageParams);
if(sign.equals(endsign)){//验证签名是否正确
官方签名工具地址:https://pay./wiki/tools/signverify/
if(&订单没有支付&){
//处理自己的业务逻辑
response.getWriter().write(setXml(&SUCCESS&, &OK&)); //告诉微信已经收到通知了
}catch(Exception e){
System.out.println(&微信支付异步通知异常&);
}else if(&订单支付了&){
response.getWriter().write(setXml(&SUCCESS&, &OK&)); //告诉微信已经收到通知了
public static String setXml(String return_code,String return_msg){
return &&xml&&return_code&&![CDATA[&+return_code+&]]&&/return_code&&return_msg&&![CDATA[&+return_msg+&]]&&/return_msg&&/xml&&;
附上本文微信app支付开发所用到的工具类下载地址
http://download.csdn.net/detail/xu_xiao_ji/9516695
以上就是微信支付 java 服务端demo (v3版本app支付 springMVC框架中)的全文介绍,希望对您学习和使用java程序开发有所帮助.
这些内容可能对你也有帮助
更多可查看Java编程列表页。
猜您也会喜欢这些文章我的微信开发代码集:公众号管理与微信支付
我的图书馆
我的微信开发代码集:公众号管理与微信支付
我的微信开发代码集:公众号管理与微信支付
时间& 11:48:25
Table of Contents
generated withDocToc
WXWeChatToolkits
公众号管理
统一下单获取预支付代码
微信内H5支付
支付结果回调
WXWeChatToolkits
我的微信SDK,包括公众平台管理、微信支付等各个版本。老实说,微信的文档并不是很友好,坑不少啊~~ 笔者在这里准备的算是半自动化的,自认为的特性有:
前后端分离,这里的JS代码和后端代码是可以单独部署的。换言之,微信里需要的各种各样的域名配置与审核,你只要保证你的HTML页面在那个域名下就好,业务逻辑的代码随便放后端这边笔者自己开发时候用的是Spring Boot,但是这里移除了所有Spring Boot的紧密耦合代码,只是用Pure Java API进行实现,也方便单元测试前端这边用的是ES6 + Webpack,可以参考笔者其他前端项目
下面就大概描述下开发流程和可以用到的本代码集的东东,半成品,权当一乐。
公众号管理
用户鉴权首先需要检测是否进行认证跳转:
WXService wxService = new WXService();
//判断是否为微信系统内
if (wxService.isWeixinBrowser()) {
//如果是在微信浏览器内判断是否需要进行登录操作
const openid = wxService.getOpenidOrRedirectToAuth("eapply");
if (!openid) {
//如果openid不存在,则提示错误,并且跳转登录授权
("未登录,现进行登录授权!");
//执行JSSDK的注册
wxService.jssdkConfig();
这里的跳转大概是这样的路径:
const auth_url = `https://open./connect/oauth2/authorize?appid=${this.appid}&response_type=code&scope=snsapi_base&state=${state}&redirect_uri=${this.redirect_uri}#wechat_redirect`
注意,一开始笔者自己是想将回调之后的跳转路径放到State里面的,但是微信好像对State做了限制,因此在这里只是配置了一个标识,而具体的标识与跳转地址映射写到了后台代码里:
* @function 生成State与跳转的网页的配置
private Map&String, String& stateMapGenerator() {
Map&String, String& stateMap = new HashMap&&();
//电子报名页面默认的跳转
stateMap.put("eapply", "http://mp.dragon./pay/index.html");
return stateM
微信的官方文档里提到,要申请JSSDK要先去获取jsapi_ticket,而jsapi_ticket需要用access_token换取。要注意,微信的access_token是分类型的,上面用户鉴权也用到了access_token,不过那个的类型是authentic。 这里的access_token类型是jsapi。配置的前端代码是:
jssdkConfig() {
//插入JSSDK脚本
// load a single file
loadjs('http://res./open/js/jweixin-1.0.0.js', () =& {
// foo.js loaded'//从URL中获取JSSDK信息
//访问远端获取JSSDK配置信息
this.getWithQueryParams({
path: "/mp/jssdk",
requestData: {
url: location.href
}).then((jssdk)=& {
console.log(jssdk);
//配置JSSDK
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: this.appid, // 必填,公众号的唯一标识
timestamp: jssdk.timestamp, // 必填,生成签名的时间戳
nonceStr: jssdk.noncestr, // 必填,生成签名的随机串
signature: jssdk.signature,// 必填,签名,见附录1
jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
//监控错误信息
wx.error(function (res) {
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
alert(JSON.stringify(res));
后端代码是:
//初始化服务
MPService mpService = new MPService();
//首先获取接口调用凭据
String accessToken = mpService.fetchAccessToken4ClientCredential().get("access_token");
//根据accessToken获取Ticket
//从微信服务端获取到Ticket
String apiTicket = mpService.fetchTicketByAccessToken(accessToken, "jsapi").get("ticket");
//获取随机字符串
String nonceStr = StringGenerator.getRandomString(10);
//获取当前时间戳
Long timeStamp = Instant.now().getEpochSecond();
//进行签名
Map&String, Object& signatureMap = new HashMap&&();
signatureMap.put("noncestr", nonceStr);
signatureMap.put("jsapi_ticket", apiTicket);
signatureMap.put("timestamp", timeStamp);
signatureMap.put("url", url);
signatureMap.put("signature", Signature.getSign4MP(signatureMap));
return signatureM
注意,微信支付内也需要签名,但是签名的算法以及所需要的Key与公众号管理内还是有一定区别的。
统一下单获取预支付代码
fetchPrepayId({
body = "商品详情",
out_trade_no = "",
total_fee = 1,
openid = undefined,
attach //附加信息
if (openid) {
//如果存在openid,则是以JSAPI方式调用
return this.getWithQueryParams({
path: this.fetchPrepayIdUrl,
requestData: {
out_trade_no,
total_fee,
//否则是以APP方式调用
return this.getWithQueryParams({
path: this.fetchPrepayIdUrl,
requestData: {
out_trade_no,
total_fee,
@SneakyThrows
public Map&String, Object& prepay(
String body,
String out_trade_no,
Integer total_fee,
String openid,
String attach) {
//最终返回的结果
Map&String, Object& result = new HashMap&&();
//调用统一下单服务
UnifiedOrderService unifiedOrderService = UnifiedOrderService
.builder(body, out_trade_no, total_fee, getIp("127.0.0.1"))
.attach(attach)
//获取的返回的同一订单信息
Map&String, Object& unidiedO
//判断openid是否存在
if (openid != null) {
//如果opendid存在,则创建JSAPI Order
unidiedOrder = unifiedOrderService.jsApiOrder(openid);
unidiedOrder = unifiedOrderService.appOrder();
System.out.println(unidiedOrder);
/* 最终客户端要提交给微信服务器的订单,因此我们也要将关键信息加进去
"appId" : "wx0ec43b",
//公众号名称,由商户传入
"timeStamp":" ",
//时间戳,自1970年以来的秒数
"nonceStr" : "e61463f8efacccfbbb444", //随机串
"package" : "prepay_id=u802345jgfjsdfgsdg888",
"signType" : "MD5",
//微信签名方式:
"paySign" : "70EABB79628FBCAFADD89" //微信签名
//获取随机字符串
String nonceStr = RandomStringGenerator.getRandomStringByLength(20);
//返回商户对应的AppID
result.put("appId", Configure.appID);
result.put("timeStamp", Instant.now().getEpochSecond());
result.put("nonceStr", nonceStr);
result.put("package", "prepay_id=" + unidiedOrder.get("prepay_id"));
result.put("signType", "MD5");
result.put("paySign", Signature.getSign4Pay(result));
//直接返回
微信内H5支付
doSyncPay({
appId="wx7dbf91",
timeStamp="",
nonceStr="2g1w8kvb5lamqwfx6j8o",
package_r="prepay_id=wxb",
signType="MD5",
paySign="01B98BAA83EC062F2F46AB75"
//调用微信支付的接口
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {
"appId": appId,
"timeStamp": timeStamp,
"nonceStr": nonceStr,
"package": package_r,
"signType": signType,
"paySign": paySign
function (res) {
//打印支付信息
console.log(res);
if (res.err_msg == "get_brand_wcpay_request:ok") {
//支付成功
// alert(JSON.stringify(res));
alert("您取消了支付!");
支付结果回调
public String wx_notify(String body) {
System.out.println(body);
PayedOrderService payedOrderService = new PayedOrderService();
//解析数据
Map&String, String& parsedMap = payedOrderService.parseNotifyXML(body);
System.out.println(parsedMap);
//调用更新状态的函数
payedOrderService.updateOrderState(parsedMap.get("attach"), "1", "1", parsedMap.get("TransactionId"));
return "success";
馆藏&22969
TA的最新馆藏
喜欢该文的人也喜欢

我要回帖

更多关于 spring mvc 微信支付 的文章

 

随机推荐