微信小程序支付
@Controller
public class UserPayToMerchantController {
public static final String appid="*********";//开发者appid
public static final String mch_id="********";//商户号
public static final String key="*****";//设置的支付密钥
public static final String secret="*********";
public static final String payUrl="https://api.mch.weixin.qq.com/pay/unifiedorder";//统一下单的url
@Autowired
private UserPayToMerchantService userPayToMerchantService;
@Autowired
private UserService userService;
public static Logger log=Logger.getLogger(UserPayToMerchantController.class);
@RequestMapping("getPrepayId")
@ResponseBody
public Result getPrepayId(PrepayIdPoJo prepayIdPoJo,HttpServletRequest request) throws IOException, NoSuchAlgorithmException, DocumentException{
log.info("有充值数据其中,用户的名称="+prepayIdPoJo.getNickName()+"用户的openid="+prepayIdPoJo.getOpenid()+"用户的充值的金额="+prepayIdPoJo.getMoney());
//关键参数判断
if(prepayIdPoJo.getOpenid()==null||prepayIdPoJo.getOpenid().equals("")){
return new Result(500,"openid这个关键参数为空",null,null,null);
}
if(prepayIdPoJo.getNickName()==null||prepayIdPoJo.getNickName().equals("")){
return new Result(500,"nickName这个关键参数为空",null,null,null);
}else{
prepayIdPoJo.setNickName(new String(prepayIdPoJo.getNickName().getBytes("ISO8859-1"),"utf-8"));
}
if(prepayIdPoJo.getMoney()==null||prepayIdPoJo.getMoney().equals("")){
return new Result(500,"money这个关键参数为空",null,null,null);
}
try{
String spbill_create_ip=request.getRemoteAddr();
StringBuilder sb=new StringBuilder();
sb.append("<xml>");
sb.append("<appid>"+appid+"</appid>");
sb.append("<mch_id>"+mch_id+"</mch_id>");
sb.append("<device_info>WEB</device_info>");
String timeStamp=String.valueOf(new Date().getTime());
sb.append("<nonce_str>"+timeStamp+"</nonce_str>");
sb.append("<body>百度-红包</body>");
String out_trade_no=String.valueOf(new Date().getTime());
sb.append("<out_trade_no>"+out_trade_no+"</out_trade_no>");
sb.append("<total_fee>"+(int)((double)prepayIdPoJo.getMoney())*100+"</total_fee>");
sb.append("<spbill_create_ip>"+spbill_create_ip+"</spbill_create_ip>");
sb.append("<notify_url><![CDATA[https://wx.ricksha.net/wxgetredpacket/userReceiver]]></notify_url>");
sb.append("<trade_type>JSAPI</trade_type>");
sb.append("<openid>"+prepayIdPoJo.getOpenid()+"</openid>");
String stringA="appid="+appid+"&body=百度-红包&device_info=WEB"+"&mch_id="+mch_id+"&nonce_str="+timeStamp+
"¬ify_url=https://wx.ricksha.net/wxgetredpacket/userReceiver"+"&openid="+prepayIdPoJo.getOpenid()+"&out_trade_no="+out_trade_no+
"&spbill_create_ip="+spbill_create_ip+"&total_fee="+(int)((double)prepayIdPoJo.getMoney())*100+"&trade_type=JSAPI";
String stringSignTemp=stringA+"&key="+key;
String sign=MD5Util.MD5Encode(stringSignTemp, "utf-8").toUpperCase();
sb.append("<sign>"+sign+"</sign>");
sb.append("</xml>");
String str=sb.toString();
//执行统一下单
//这里需要一个工具类HttpClientUtil,字符串需要是utf-8的否则会出现微信的官方校验器通过,但是返回结果是----签名错误
String resultXml=HttpClientUtil.doPosts(payUrl, str);
//这里需要一个工具类XmlUtil
Map<String,String> map=XmlUtil.parseXmlText(resultXml);
//这里需要一个工具类JsonUtils
String mapStr=JsonUtils.objectToJson(map);
PrepayIdPoJo pojo=(PrepayIdPoJo) JsonUtils.jsonToPojo(mapStr, PrepayIdPoJo.class);
String stringB="appId="+appid+"&nonceStr="+timeStamp
+"&package=prepay_id="+pojo.getPrepay_id()
+"&signType=MD5&timeStamp="+timeStamp+"&key="+key;
//md5的工具类,这里是需要utf-8格式
String paySign=MD5Util.MD5Encode(stringB, "utf-8").toUpperCase();
//这是一个返回数据封装的一个对象
PayPoJo pay=new PayPoJo();
pay.setTimeStamp(timeStamp);
pay.setNonceStr(timeStamp);
pay.setPack("prepay_id="+pojo.getPrepay_id());
pay.setSignType("MD5");
pay.setPaySign(paySign);
String payStr=JsonUtils.objectToJson(pay);
return new Result(200,"成功",payStr,null,null);
}catch(Exception e){
e.printStackTrace();
log.info("充值数据异常,用户的名称="+prepayIdPoJo.getNickName()+"用户的openid="+prepayIdPoJo.getOpenid()+"用户的充值的金额="+prepayIdPoJo.getMoney());
}
return null;
}
}
//以上工具类请在个人博客上寻找
微信小程序支付的更多相关文章
- 微信小程序支付步骤
http://blog.csdn.net/wangsf789/article/details/53419781 最近开发微信小程序进入到支付阶段,一直以来从事App开发,所以支付流程还是熟记于心的.但 ...
- 微信小程序支付及退款流程详解
微信小程序的支付和退款流程 近期在做微信小程序时,涉及到了小程序的支付和退款流程,所以也大概的将这方面的东西看了一个遍,就在这篇博客里总结一下. 首先说明一下,微信小程序支付的主要逻辑集中在后端,前端 ...
- Java 后端微信小程序支付demo (网上说的坑里面基本上都有)
Java 后端微信小程序支付 一.遇到的问题 1. 商户号该产品权限未开通,请前往商户平台>产品中心检查后重试 2.签名错误 3.已经调起微信统一下单接口,可以拿到预支付ID,但是前端支付的时候 ...
- php对接微信小程序支付
前言:这里我就假装你已经注册了微信小程序,并且基本的配置都已经好了.注: 个人注册小程序不支持微信支付,所以我还是假装你是企业或者个体工商户的微信小程序,其他的商户号注册,二者绑定,授权,支付开通,就 ...
- 微信小程序支付遇到的坑
1,微信公众号支付和微信小程序支付有差异 微信公众号:可以直接跳转走h5的微信支付 微信小程序:在测试环境.沙箱环境使用微信公众号的跳转支付没有问题,在线上存在支付异常 最后商讨的解决方法 openi ...
- 微信小程序支付接入注意点
一.微信支付后台服务器部署 服务器采用ubuntu16.04 + php7.0 + apache2.0. 微信支付后台服务使用了curl 和 samplexml ,因此php.ini配置中必须开启这两 ...
- 微信小程序支付开发之申请退款
微信小程序支付跟微信公众号支付类似,这里不另做记录,如果没有开发过支付,可以查看我关于微信支付的文章 重点记录微信小程序申请退款开发过程中遇到一些坑. 退款接口比支付接口接口多了一个 双向证书 证书介 ...
- 微信小程序支付接入实战
1. 微信小程序支付接入实战 1.1. 需求 最近接到一个小程序微信支付的需求,需要我写后台支持,本着能不自己写就不自己写的cv原则,在网上找到了些第三方程序,经过尝试后,最后决定了这不要脸作者的 ...
- 微信小程序支付异常:requestPayment:fail no permission
今天在调试微信小程序支付时碰到了这个问题,支付参数都正常生成了,在调用 wx.requestPayment 进行支付时遇到了这个报错,查了一下发现是开发者工具中 AppID 写错了,用的 AppID ...
- SpringBoot2.0微信小程序支付多次回调问题
SpringBoot2.0微信小程序支付多次回调问题 WxJava - 微信开发 Java SDK(开发工具包); 支持包括微信支付.开放平台.公众号.企业微信/企业号.小程序等微信功能的后端开发. ...
随机推荐
- powerdesigner逆向工程 oracle
我们已经有了数据库,希望使用powerdesigner工具生成pdm文件. 本文使用的版本是 15.0 1, File-->Reverse Engineer-->Database... ...
- Java报文或者同步的数据有个别乱码情况的处理.
从其它系统获取到的用户数据,1万多条数据有其中有2条数据是乱码形式,这种形式表现为最后一个字符和本身的分隔符组成了一个乱码 错误数据 : 220296|+|黄燕 鄚+|7|+|7|+|02220 ...
- MongoDB分片原理篇
MongoDB分片 为什么需要Sharded cluster? MongoDB目前3大核心优势:『灵活模式』+ 『高可用性』 + 『可扩展性』,通过json文档来实现灵活模式,通过复制集来保证高可用, ...
- phoenix
phoenix(直译做凤凰)的操作sql是通过jdbc发送到HBase的.phoenix的查询语句会转化为hbase的scan操作和服务器端的过滤器.如果我们手工使用HBase的api去写这些代码,也 ...
- Chrome控制台选择器简介
Chrome的控制台是支持用$来获取元素的,这点可能是很多人不知道的.本篇文章将会简单介绍怎样更好的来使用这种快捷方式来获取元素. 判断当前窗口的$是来自谁的 我们知道jQ里面经常使用$来进行元素选择 ...
- nmcli命令大集合
nmcli命令 地址配置工具:nmcli nmcli device 查看所有网卡的信息 nmcli device status 和numcli device 相同 nmcli device ...
- java中Set类接口的用法
在Java中使用Set,可以方便地将需要的类型,以集合类型保存在一个变量中.主要应用在显示列表. Set是一个不包含重复元素的collection.更确切地讲,set 不包含满足 e1.equals( ...
- js Date() 浏览器兼容问题解决
一般 直接new Date() 是不会出现兼容性问题的,而 new Date(datetimeformatstring) 常常会出现浏览器兼容性问题,为什么,datetimeformatstring中 ...
- java GUI编程二
java基础学习总结--GUI编程(二) 一.事件监听 测试代码一: 1 package cn.javastudy.summary; 2 3 import java.awt.*; 4 import j ...
- Apache Spark 2.2.0 中文文档 - Submitting Applications | ApacheCN
Submitting Applications 在 script in Spark的 bin 目录中的spark-submit 脚本用与在集群上启动应用程序.它可以通过一个统一的接口使用所有 Spar ...