package pay;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.security.KeyStore;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.UUID;
import javax.net.ssl.SSLContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContexts;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.xml.sax.InputSource;
import com.fasterxml.jackson.databind.ObjectMapper;
import http.HttpClientConnectionManager;
import util.MD5;
import util.RequestHandler;
/**
* 类名称:WechatActivityController
* 创建人:aofavx
* 创建时间:2016-08-03
*/
@Controller
@RequestMapping(value="/wc")
public class WechatActivityController {
String GZHID = "";// 微信公众号id
String GZHSecret = "";// 微信公众号密钥id
String SHHID = "";// 财付通商户号
String SHHKEY = "";// 商户号对应的密钥
public static String getUuid(){
UUID uuid=UUID.randomUUID();
String uuidStr=uuid.toString();
uuidStr=uuidStr.replace("-", "");
return uuidStr;
}
/**
* 用户提交支付,获取微信支付订单接口
*/
@RequestMapping(value="/pay.do")
public ModelAndView pay(HttpServletRequest request,HttpServletResponse response){
System.out.println("-------------------pay.do returnurl-----------------");
ModelAndView mv = new ModelAndView();
/*------1.获取参数信息------- */
//商户订单号
String out_trade_no= request.getParameter("state");
System.out.println(out_trade_no+"-------------订单号");
//价格
String money = request.getParameter("money");
System.out.println(money+"-------------money");
//金额转化为分为单位
String finalmoney = WeChat.getMoney(money);
//获取用户的code
String code = request.getParameter("code");
System.out.println(code+"-------------code");
/*------2.根据code获取微信用户的openId和access_token------- */
//注: 如果后台程序之前已经得到了用户的openId 可以不需要这一步,直接从存放openId的位置或session中获取就可以。
//提交的url路径也就不需要再经过微信重定向。写成:http://localhost:8080/项目名/wechat/pay?money=${sumPrice}&state=${orderId}
String openid=null;
try {
List<Object> list = accessToken(code);
openid=list.get(1).toString();
System.out.println(openid+"--------------openid");
} catch (IOException e) {
// logger.error("根据code获取微信用户的openId出现错误", e);
mv.setViewName("error");
return mv;
}
/*------3.生成预支付订单需要的的package数据------- */
//随机数
String nonce_str= MD5.getMessageDigest(String.valueOf(new Random().nextInt(10000)).getBytes());
System.out.println(nonce_str+"-------------------nonce_str");
//订单生成的机器 IP
String spbill_create_ip = request.getRemoteAddr();
System.out.println(spbill_create_ip+"-------------------spbill_create_ip");
//交易类型 :jsapi代表微信公众号支付
String trade_type = "JSAPI";
//这里notify_url是 微信处理完支付后的回调的应用系统接口url。
String notify_url ="http://www.moodgame.cn/WX/wc/weixinNotify.do";
SortedMap<String, String> packageParams = new TreeMap<String, String>();
packageParams.put("appid", GZHID);
packageParams.put("mch_id", SHHID);
packageParams.put("nonce_str", nonce_str);
packageParams.put("body", "费用");
packageParams.put("out_trade_no", out_trade_no);
packageParams.put("total_fee", finalmoney);
packageParams.put("spbill_create_ip", spbill_create_ip);
packageParams.put("notify_url", notify_url);
packageParams.put("trade_type", trade_type);
packageParams.put("openid", openid);
/*------4.根据package数据生成预支付订单号的签名sign------- */
RequestHandler reqHandler = new RequestHandler(request, response);
reqHandler.init( GZHID, GZHSecret, SHHKEY);
String sign = reqHandler.createSign(packageParams);
System.out.println(sign+"----------sign");
/*------5.生成需要提交给统一支付接口https://api.mch.weixin.qq.com/pay/unifiedorder 的xml数据-------*/
String xml="<xml>"+
"<appid>"+ GZHID+"</appid>"+
"<mch_id>"+ SHHID+"</mch_id>"+
"<nonce_str>"+nonce_str+"</nonce_str>"+
"<sign>"+sign+"</sign>"+
"<body><![CDATA["+"费用"+"]]></body>"+
"<out_trade_no>"+out_trade_no+"</out_trade_no>"+
"<total_fee>"+finalmoney+"</total_fee>"+
"<spbill_create_ip>"+spbill_create_ip+"</spbill_create_ip>"+
"<notify_url>"+notify_url+"</notify_url>"+
"<trade_type>"+trade_type+"</trade_type>"+
"<openid>"+openid+"</openid>"+
"</xml>";
/*------6.调用统一支付接口https://api.mch.weixin.qq.com/pay/unifiedorder 生产预支付订单----------*/
String createOrderURL = "https://api.mch.weixin.qq.com/pay/unifiedorder";
String prepay_id="";
try {
prepay_id = GetWxOrderno.getPayNo(createOrderURL, xml);
System.out.println(prepay_id+"--------------------prepay_id");
if(prepay_id.equals("")){
mv.addObject("ErrorMsg", "支付错误");
mv.setViewName("error");
return mv;
}
} catch (Exception e) {
// logger.error("统一支付接口获取预支付订单出错", e);
mv.setViewName("error");
return mv;
}
/*将prepay_id存到库中*/
/*PageData p = new PageData();
p.put("shopId", out_trade_no);
p.put("prePayId", prepay_id);
activityService.updatePrePayId(p);*/
/*------7.将预支付订单的id和其他信息生成签名并一起返回到jsp页面 ------- */
nonce_str= MD5.getMessageDigest(String.valueOf(new Random().nextInt(10000)).getBytes());
SortedMap<String, String> finalpackage = new TreeMap<String, String>();
String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
System.out.println(timestamp+"-------timestamp");
String packages = "prepay_id="+prepay_id;
finalpackage.put("appId", GZHID);
finalpackage.put("timeStamp", timestamp);
finalpackage.put("nonceStr", nonce_str);
finalpackage.put("package", packages);
finalpackage.put("signType", "MD5");
String finalsign = reqHandler.createSign(finalpackage);
mv.addObject("appid", GZHID);
mv.addObject("timeStamp", timestamp);
mv.addObject("nonceStr", nonce_str);
mv.addObject("packageValue", packages);
mv.addObject("paySign", finalsign);
mv.addObject("success","ok");
mv.setViewName("pay");
return mv;
}
/**
* 提交支付后的微信异步返回接口
*/
@RequestMapping(value="/weixinNotify.do")
public String weixinNotify(HttpServletRequest request, HttpServletResponse response){
System.out.println("--------------notify-------------");
String out_trade_no=null;
String return_code =null;
没有合适的资源?快使用搜索试试~ 我知道了~
微信公众号支付demo(未封装)
共65个文件
xml:42个
java:16个
jsp:5个
需积分: 10 15 下载量 54 浏览量
2017-10-30
11:59:00
上传
评论 3
收藏 77KB RAR 举报
温馨提示
经过测试可以支付,工具类没有封装,我有个经过封装的jar的demo在另一页可以自行寻找,一样好使,只要设置对
资源推荐
资源详情
资源评论
收起资源包目录
WXDemo.rar (65个子文件)
WXDemo
pom.xml 7KB
WX.iml 4KB
src
main
webapp
WEB-INF
web.xml 2KB
js
jquery-1.8.1.js 93KB
index.jsp 1KB
jsp
pay.jsp 2KB
toPay.jsp 1KB
fail.jsp 327B
success.jsp 330B
resources
SpringMVC-servlet.xml 1KB
java
http
HttpResponse.java 2KB
HttpRequest.java 3KB
HttpConnect.java 2KB
HttpResultType.java 670B
HttpClientConnectionManager.java 2KB
TrustAnyTrustManager.java 585B
MySSLSocketFactory.java 1KB
util
Sha1Util.java 2KB
TenpayUtil.java 4KB
MD5.java 809B
TenpayConfig.java 1KB
MD5Util.java 1KB
RequestHandler.java 7KB
pay
GetWxOrderno.java 4KB
WechatActivityController.java 16KB
WeChat.java 843B
.idea
uiDesigner.xml 9KB
misc.xml 566B
modules.xml 244B
compiler.xml 616B
workspace.xml 53KB
libraries
Maven__org_springframework_spring_aspects_4_2_0_RELEASE.xml 637B
Maven__aopalliance_aopalliance_1_0.xml 514B
jsp_api.xml 306B
Maven__org_apache_httpcomponents_httpclient_cache_4_2_5.xml 619B
Maven__com_spring_spring_build_src_3_2_9.xml 559B
Maven__commons_httpclient_commons_httpclient_3_1.xml 591B
Maven__com_fasterxml_jackson_core_jackson_core_2_6_0.xml 595B
Maven__org_apache_httpcomponents_httpcore_4_3_2.xml 563B
Maven__org_aspectj_aspectjweaver_1_8_6.xml 542B
Maven__org_apache_httpcomponents_httpmime_4_2_5.xml 563B
Maven__org_apache_httpcomponents_httpclient_4_3_4.xml 577B
Maven__org_springframework_spring_webmvc_4_2_0_RELEASE.xml 630B
Maven__junit_junit_3_8_1.xml 462B
Maven__dom4j_dom4j_1_6_1.xml 462B
Maven__commons_codec_commons_codec_1_6.xml 536B
Maven__org_springframework_spring_aop_4_2_0_RELEASE.xml 609B
Maven__org_jdom_jdom_1_1.xml 453B
Maven__org_springframework_spring_context_4_2_0_RELEASE.xml 637B
Maven__org_slf4j_slf4j_api_1_7_7.xml 506B
Maven__org_springframework_spring_web_4_2_0_RELEASE.xml 609B
Maven__org_apache_httpcomponents_fluent_hc_4_5_2.xml 570B
Maven__com_fasterxml_jackson_core_jackson_databind_2_6_0.xml 623B
Maven__xml_apis_xml_apis_1_0_b2.xml 502B
Maven__org_springframework_spring_expression_4_2_0_RELEASE.xml 658B
Maven__org_slf4j_slf4j_log4j12_1_7_7.xml 534B
Maven__commons_logging_commons_logging_1_1_1.xml 572B
Maven__log4j_log4j_1_2_17.xml 469B
Maven__org_springframework_spring_beans_4_2_0_RELEASE.xml 623B
Maven__org_springframework_spring_messaging_4_2_0_RELEASE.xml 651B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_6_0.xml 644B
Maven__javax_servlet_servlet_api_2_5.xml 522B
Maven__org_springframework_spring_core_4_2_0_RELEASE.xml 616B
artifacts
WX_war_exploded.xml 3KB
WX_war.xml 272B
inspectionProfiles
共 65 条
- 1
资源评论
我是小酒
- 粉丝: 2659
- 资源: 26
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功