Commit 3415d789 by chongli

微信小程序

parent 2f91e1b6
Showing with 1296 additions and 13 deletions
......@@ -13,10 +13,12 @@ import com.ctrip.fun.common.vo.PagedResponseBean;
import com.ctrip.fun.common.vo.Request;
import com.ctrip.fun.common.vo.Response;
import com.ctrip.fun.common.vo.ResponseStatusEnum;
import com.ctrip.fun.common.vo.basic.VoucherGetLogBean;
import com.ctrip.fun.common.vo.basic.VoucherItemDTO;
import com.ctrip.fun.common.vo.basic.VoucherQueryDto;
import com.ctrip.fun.common.vo.basic.VoucherQueryFormDTO;
import com.ctrip.fun.common.vo.basic.VoucherQueryRequestDTO;
import com.ctrip.fun.common.vo.basic.VoucherShareLogBean;
import com.ctrip.fun.golf.service.basic.VoucherService;
/**
......@@ -141,6 +143,47 @@ public class VoucherController {
response.setStatusEnum(ResponseStatusEnum.SUCCESS);
return response;
}
@ResponseBody
@RequestMapping(value = "/queryListForMiniApps", method = RequestMethod.POST)
public Response<PagedResponseBean<VoucherItemDTO>> queryListForMiniApps(@RequestBody Request<VoucherQueryDto> request) {
Response<PagedResponseBean<VoucherItemDTO>> response = new Response<PagedResponseBean<VoucherItemDTO>>();
PagedResponseBean<VoucherItemDTO> result = voucherService.queryListForMiniApps(request.getBody());
response.setBody(result);
response.setStatusEnum(ResponseStatusEnum.SUCCESS);
return response;
}
@ResponseBody
@RequestMapping(value = "/shareVoucherForMiniApps", method = RequestMethod.POST)
public Response<VoucherShareLogBean> shareVoucherForMiniApps(@RequestBody Request<VoucherShareLogBean> request) {
Response<VoucherShareLogBean> response = voucherService.shareVoucherForMiniApps(request.getBody());
return response;
}
@ResponseBody
@RequestMapping(value = "/getShareVoucherLogForMiniApps", method = RequestMethod.POST)
public Response<VoucherShareLogBean> getShareVoucherLogForMiniApps(@RequestBody Request<VoucherShareLogBean> request) {
Response<VoucherShareLogBean> response = voucherService.getShareVoucherLogForMiniApps(request.getBody());
return response;
}
@ResponseBody
@RequestMapping(value = "/cancelShareVoucherForMiniApps", method = RequestMethod.POST)
public Response<String> cancelShareVoucherForMiniApps(@RequestBody Request<VoucherShareLogBean> request) {
Response<String> response = voucherService.cancelShareVoucherForMiniApps(request.getBody());
return response;
}
@ResponseBody
@RequestMapping(value = "/getSharedVoucherForMiniApps", method = RequestMethod.POST)
public Response<String> getSharedVoucherForMiniApps(@RequestBody Request<VoucherGetLogBean> request) {
Response<String> response = voucherService.getSharedVoucherForMiniApps(request.getBody());
return response;
}
@ResponseBody
@RequestMapping(value = "/queryListForCourseOrder", method = RequestMethod.POST)
......
......@@ -2,17 +2,20 @@
* Copyright 2014 CTRIP Co.,Ltd. All rights reserved.
*/
package com.ctrip.fun.golf.api.order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.alibaba.fastjson.JSONObject;
import com.ctrip.fun.common.vo.Request;
import com.ctrip.fun.common.vo.Response;
import com.ctrip.fun.common.vo.order.CommuneOrderBean;
import com.ctrip.fun.common.vo.order.CommuneOrderListItemBean;
import com.ctrip.fun.common.vo.order.CommuneOrderResourceBean;
import com.ctrip.fun.golf.service.order.AbstractOrderService;
import com.ctrip.fun.golf.service.order.CommuneOrderService;
/**
* @content
* @author csleng
......@@ -24,6 +27,21 @@ public class CommuneOrderController extends AbstractOrderController<CommuneOrder
@Autowired
private CommuneOrderService communeOrderService;
@SuppressWarnings("unchecked")
@ResponseBody
@RequestMapping(value = "/placeOrderForMiniApp", method = RequestMethod.POST)
public Response<JSONObject> placeOrderForMiniApp(@RequestBody Request<CommuneOrderBean> request) {
Response<JSONObject> response = new Response<JSONObject>();
JSONObject jSONObject;
try {
jSONObject = communeOrderService.placeOrderForMiniApp(request.getBody());
response.setBody(jSONObject);
} catch (Exception e) {
e.printStackTrace();
}
return response;
}
@Override
protected AbstractOrderService<CommuneOrderBean, CommuneOrderResourceBean> getOrderService() {
......
......@@ -22,6 +22,8 @@ import com.ctrip.fun.common.vo.user.IdentifyingCodeBean;
import com.ctrip.fun.common.vo.user.ImUserBean;
import com.ctrip.fun.common.vo.user.LoginBean;
import com.ctrip.fun.common.vo.user.LoginResultBean;
import com.ctrip.fun.common.vo.user.MiniAppLoginBean;
import com.ctrip.fun.common.vo.user.MiniAppLoginResultBean;
import com.ctrip.fun.common.vo.user.OutsideUserBean;
import com.ctrip.fun.common.vo.user.RecommendUserBean;
import com.ctrip.fun.common.vo.user.RecommendUserItemBean;
......@@ -35,6 +37,7 @@ import com.ctrip.fun.common.vo.user.UserExtBean;
import com.ctrip.fun.common.vo.user.UserQuery;
import com.ctrip.fun.common.vo.user.VerifyCodeBean;
import com.ctrip.fun.common.vo.user.VerifyResultBean;
import com.ctrip.fun.common.vo.user.WeChatAppLoginReq;
import com.ctrip.fun.common.vo.user.WeChatUserBean;
import com.ctrip.fun.common.vo.user.WeChatUserResultBean;
import com.ctrip.fun.golf.domain.basic.OutsideUser;
......@@ -164,6 +167,37 @@ public class UserController {
response.setBody(userService.register(request.getBody()));
return response;
}
@ResponseBody
@RequestMapping(value = "/loginMiniApp", method = RequestMethod.POST)
public Response<MiniAppLoginResultBean> loginMiniApp(@RequestBody Request<WeChatAppLoginReq> request) throws Exception {
Response<MiniAppLoginResultBean> response = new Response<MiniAppLoginResultBean>();
response.setStatus(ResponseStatusEnum.SUCCESS.getValue());
response.setMessage(ResponseStatusEnum.SUCCESS.getMsg());
response.setBody(userService.loginMiniApp(request.getBody()));
return response;
}
@ResponseBody
@RequestMapping(value = "/getUserInfoForMiniApp", method = RequestMethod.POST)
public Response<Map<String,String>> getUserInfoForMiniApp(@RequestBody Request<String> request) throws Exception {
Response<Map<String,String>> response = new Response<Map<String,String>>();
response.setStatus(ResponseStatusEnum.SUCCESS.getValue());
response.setMessage(ResponseStatusEnum.SUCCESS.getMsg());
response.setBody(userService.getUserInfoForMiniApp(request.getBody()));
return response;
}
//小程序没有手机号
@ResponseBody
@RequestMapping(value = "/miniAppLoginByDynamicPassword", method = RequestMethod.POST)
public Response<MiniAppLoginResultBean> miniAppLoginByDynamicPassword(@RequestBody Request<MiniAppLoginBean> request) throws Exception {
Response<MiniAppLoginResultBean> response = new Response<MiniAppLoginResultBean>();
response.setStatus(ResponseStatusEnum.SUCCESS.getValue());
response.setMessage(ResponseStatusEnum.SUCCESS.getMsg());
response.setBody(userService.miniAppLoginByDynamicPassword(request.getBody()));
return response;
}
@ResponseBody
@RequestMapping(value = "/login", method = RequestMethod.POST)
......
......@@ -82,6 +82,40 @@ public class VoucherDao extends GenericHibernateDao<Voucher, Integer> {
query.executeUpdate();
}
/**
* 修改可分享优惠券状态为分享中
*/
public void updateVoucherIsShare(Integer id) {
if (id < 1 || id == null) {
return;
}
String sql = "update Voucher set isShare=1 where id= " + id + "";
Query query = getSession().createQuery(sql);
query.executeUpdate();
}
/**
* 修改可分享优惠券状态为非分享中
*/
public void updateVoucherNotIsShare(Integer id) {
if (id < 1 || id == null) {
return;
}
String sql = "update Voucher set isShare=0 where id= " + id + "";
Query query = getSession().createQuery(sql);
query.executeUpdate();
}
/**
* 修改优惠券状态为已分享出去状态
*/
public void updateVoucherIsShared(Integer id) {
if (id < 1 || id == null) {
return;
}
String sql = "update Voucher set isShare=0,used=1 where id= " + id + "";
Query query = getSession().createQuery(sql);
query.executeUpdate();
}
public List<Voucher> getVoucherListByOrderNo(Long orderNo) {
String hsql = "from Voucher t where t.used=1 and t.orderNo=" + orderNo;
......@@ -607,7 +641,7 @@ public class VoucherDao extends GenericHibernateDao<Voucher, Integer> {
int perNum) {
String query = userQuerySql + " limit " + start + "," + perNum;
StringBuffer insertSql = new StringBuffer(
"insert into bsc_voucher (type, amount,startUseDate,endUseDate,uid,source,ruleId,remark,description) values ");
"insert into bsc_voucher (type, amount,startUseDate,endUseDate,uid,source,ruleId,remark,description,shared) values ");
StringBuffer insertSmsSql = new StringBuffer(
"insert into bsc_sms(message, status, mobileNo,type,messageId) values ");
int source = VoucherSourceEnum.NORMAL.getValue();
......@@ -634,7 +668,8 @@ public class VoucherDao extends GenericHibernateDao<Voucher, Integer> {
insertSql.append(",'" + voucherRule.getId() + "'");
insertSql.append(",'" + StringUtils.escapeSql(voucherRule.getRemark()) + "'");
insertSql
.append(",'" + StringUtils.escapeSql(voucherRule.getDescription()) + "'),");
.append(",'" + StringUtils.escapeSql(voucherRule.getDescription()) + "'");
insertSql.append(",'" + voucherRule.getShared() + "'),");
}
BigDecimal totalAmount = voucherRule.getAmount().multiply(
......@@ -812,4 +847,73 @@ public class VoucherDao extends GenericHibernateDao<Voucher, Integer> {
return (Voucher) criteria.uniqueResult();
}
public PagedResponseBean<VoucherItemDTO> queryListForMiniApps(VoucherQueryDto queryBean) {
StringBuilder sb = new StringBuilder(
"select SQL_CALC_FOUND_ROWS v.Id AS id,v.Type AS type,v.Amount AS amount,v.StartUseDate AS startUseDate,v.EndUseDate AS endUseDate,v.Used AS used,v.UseDate AS useDate,rule.remark AS remark,rule.description AS description,v.UID AS uid,v.Source AS source,v.ruleId AS ruleId,v.shared,v.isShare from bsc_voucher v LEFT JOIN bsc_voucher_rule rule on (v.ruleId=rule.id) where 1=1 ");
if (queryBean.getUsed() != null) {
if(queryBean.getUsed()==0){
sb.append("and Used=0 ");
}
if(queryBean.getUsed()==1){
sb.append("and Used=1 ");
}
}
if (queryBean.getExpired() != null) {
if(queryBean.getExpired()==0){
sb.append("and DATE_FORMAT(v.EndUseDate, '%Y-%m-%d') >= DATE_FORMAT(now(), '%Y-%m-%d') ");
}
if(queryBean.getExpired()==1){
sb.append("and DATE_FORMAT(v.EndUseDate, '%Y-%m-%d') < DATE_FORMAT(now(), '%Y-%m-%d') ");
}
}
if (queryBean.getShared() != null) {
if(queryBean.getShared()==0){
sb.append("and v.shared=0 ");
}
if(queryBean.getShared()==1){
sb.append("and v.shared=1 ");
}
}
if (StringUtils.hasText(queryBean.getUid())) {
sb.append(" and v.uid='").append(queryBean.getUid()).append("'");
}
sb.append(" order by v.EndUseDate asc,v.Amount desc");
Session session = this.getSession();
Query query = session.createSQLQuery(sb.toString());
query.setFirstResult(queryBean.getPagerOffset());
query.setMaxResults(queryBean.getPagerPerPage());
Query queryCount = session.createSQLQuery(" SELECT FOUND_ROWS() ");
query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
List<Map<String, Object>> queryResult = query.list();
int count = ((BigInteger) queryCount.uniqueResult()).intValue();
List<VoucherItemDTO> result = new LinkedList<VoucherItemDTO>();
for (Map<String, Object> map : queryResult) {
VoucherItemDTO voucher = new VoucherItemDTO();
BeanConverter.populate(voucher, map);
result.add(voucher);
}
PagedResponseBean<VoucherItemDTO> pagedResponseBean = new PagedResponseBean<VoucherItemDTO>();
pagedResponseBean.setCount(count);
pagedResponseBean.setResult(result);
return pagedResponseBean;
}
public List<VoucherItemDTO> queryListByIdsForMiniApps(String ids) {
StringBuilder sb = new StringBuilder("select SQL_CALC_FOUND_ROWS v.Id AS id,v.Type AS type,v.Amount AS amount,v.StartUseDate AS startUseDate,v.EndUseDate AS endUseDate,v.Used AS used,v.UseDate AS useDate,rule.remark AS remark,rule.description AS description,v.UID AS uid,v.Source AS source,v.ruleId AS ruleId,v.shared,v.isShare from bsc_voucher v LEFT JOIN bsc_voucher_rule rule on (v.ruleId=rule.id) where 1=1 ");
sb.append(" and v.id in(").append(ids).append(")");
Session session = this.getSession();
Query query = session.createSQLQuery(sb.toString());
query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
List<Map<String, Object>> queryResult = query.list();
List<VoucherItemDTO> result = new LinkedList<VoucherItemDTO>();
for (Map<String, Object> map : queryResult) {
VoucherItemDTO voucher = new VoucherItemDTO();
BeanConverter.populate(voucher, map);
result.add(voucher);
}
return result;
}
}
package com.ctrip.fun.golf.dao.basic;
import com.ctrip.fun.golf.dao.GenericHibernateDao;
import com.ctrip.fun.golf.domain.basic.VoucherGetLog;
public class VoucherGetLogDao extends GenericHibernateDao<VoucherGetLog, Integer> {
}
package com.ctrip.fun.golf.dao.basic;
import com.ctrip.fun.golf.dao.GenericHibernateDao;
import com.ctrip.fun.golf.domain.basic.VoucherShareLog;
public class VoucherShareLogDao extends GenericHibernateDao<VoucherShareLog, Integer> {
}
......@@ -506,6 +506,14 @@ public class UserExtDao extends GenericHibernateDao<UserExt, Integer> {
query.setParameter("uid", bean.getUid());
return query.executeUpdate();
}
public int updateUserExtByUnionid(UserExt userExt) {
String sql = "UPDATE UserExt SET uid= :mobilePhone,mobilePhone = :mobilePhone,bindedMobilePhone =:mobilePhone WHERE unionId = :unionid";
Query query = getSession().createQuery(sql);
query.setParameter("mobilePhone", userExt.getMobilePhone());
query.setParameter("unionid", userExt.getUnionId());
return query.executeUpdate();
}
public int updateBlockFlag(UserExt bean) {
......@@ -1103,6 +1111,13 @@ public class UserExtDao extends GenericHibernateDao<UserExt, Integer> {
}
public UserExt getUserInfoForMiniApp(String mobilePhone) {
String hsql = "from UserExt t where t.mobilePhone=:mobilePhone or bindedMobilePhone=:mobilePhone";
Query query = getSession().createQuery(hsql);
query.setParameter("mobilePhone", mobilePhone);
return (UserExt) query.uniqueResult();
}
/**
* 修改用户差点
*/
......
......@@ -8,6 +8,7 @@ import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Restrictions;
import com.ctrip.fun.golf.dao.GenericHibernateDao;
......@@ -40,5 +41,11 @@ public class UserTokenDao extends GenericHibernateDao<UserToken, Serializable> {
return null;
}
}
public void updateUserIdByToken(String token, String userId) {
String sql = "update UserToken set userId='" + userId + "' where token= '" + token + "'";
Query query = getSession().createQuery(sql);
query.executeUpdate();
}
}
......@@ -51,6 +51,8 @@ public class Voucher implements java.io.Serializable {
* 使用规则
*/
private String remark;
private int isShare;
public Voucher() {
}
......@@ -239,5 +241,14 @@ public class Voucher implements java.io.Serializable {
public void setRemark(String remark) {
this.remark = remark;
}
@Column(name = "isShare")
public int getIsShare() {
return isShare;
}
public void setIsShare(int isShare) {
this.isShare = isShare;
}
}
/**
* Copyright 2014 CTRIP Co.,Ltd. All rights reserved.
*/
package com.ctrip.fun.golf.domain.basic;
import static javax.persistence.GenerationType.IDENTITY;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
* @author zgsong
* @version 1.0.0
*/
@Entity
@Table(name = "bsc_voucher_get_log")
public class VoucherGetLog implements Serializable {
/**
* serialVersionUID
*/
private static final long serialVersionUID = -5198881174057011384L;
/**
* 主键
*/
private Integer id;
/**
* 分享日志表中的id
*/
private String shareid;
/**
*抢券人的uid
*/
private String uid;
/**
*抢走的券id
*/
private Integer voucherid;
/**
* 抢券时间
*/
private Date getTime;
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return id;
}
@Column(name = "shareid")
public String getShareid() {
return shareid;
}
@Column(name = "uid")
public String getUid() {
return uid;
}
@Column(name = "voucherid")
public Integer getVoucherid() {
return voucherid;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "getTime", nullable = false, length = 19)
public Date getGetTime() {
return getTime;
}
public void setId(Integer id) {
this.id = id;
}
public void setShareid(String shareid) {
this.shareid = shareid;
}
public void setUid(String uid) {
this.uid = uid;
}
public void setVoucherid(Integer voucherid) {
this.voucherid = voucherid;
}
public void setGetTime(Date getTime) {
this.getTime = getTime;
}
}
......@@ -125,6 +125,12 @@ public class VoucherRule {
* 是否多球场抵用券 0,否 , 1 是
*/
private int multiple;
/**
* 是否可以分享
*/
private int shared;
@Id
@GeneratedValue(strategy = IDENTITY)
......@@ -321,6 +327,15 @@ public class VoucherRule {
public void setMultiple(int multiple) {
this.multiple = multiple;
}
@Column(name = "shared")
public int getShared() {
return shared;
}
public void setShared(int shared) {
this.shared = shared;
}
......
/**
* Copyright 2014 CTRIP Co.,Ltd. All rights reserved.
*/
package com.ctrip.fun.golf.domain.basic;
import static javax.persistence.GenerationType.IDENTITY;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
* @author zgsong
* @version 1.0.0
*/
@Entity
@Table(name = "bsc_voucher_share_log")
public class VoucherShareLog implements Serializable {
/**
* serialVersionUID
*/
private static final long serialVersionUID = -5198881174057011384L;
/**
* 主键
*/
private Integer id;
/**
* 分享人id
*/
private String uid;
/**
*传入的参数:被分享的券id
*/
private String voucherIds;
/**
* 分享发生时间
*/
private Date createTime;
/**
* 状态
*/
private Integer status;
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return id;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "createTime", nullable = false, length = 19)
public Date getCreateTime() {
return createTime;
}
@Column(name = "uid")
public String getUid() {
return uid;
}
@Column(name = "voucherIds")
public String getVoucherIds() {
return voucherIds;
}
@Column(name = "status")
public Integer getStatus() {
return status;
}
public void setId(Integer id) {
this.id = id;
}
public void setUid(String uid) {
this.uid = uid;
}
public void setVoucherIds(String voucherIds) {
this.voucherIds = voucherIds;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public void setStatus(Integer status) {
this.status = status;
}
}
package com.ctrip.fun.golf.domain.payment;
public class Configure {
private static String key = "59c7d057f02adb2aff5e90e9a6cda104";
//小程序ID
private static String appID = "wx51a2695abf1a0b12";
//商户号
private static String mch_id = "1276126201";
//
private static String secret = "d2be0d1219f11d0a4373380e9f959de9";
public static String getSecret() {
return secret;
}
public static void setSecret(String secret) {
Configure.secret = secret;
}
public static String getKey() {
return key;
}
public static void setKey(String key) {
Configure.key = key;
}
public static String getAppID() {
return appID;
}
public static void setAppID(String appID) {
Configure.appID = appID;
}
public static String getMch_id() {
return mch_id;
}
public static void setMch_id(String mch_id) {
Configure.mch_id = mch_id;
}
}
package com.ctrip.fun.golf.domain.payment;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import javax.net.ssl.SSLContext;
import javax.net.ssl.X509TrustManager;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
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.HttpClients;
import org.apache.http.util.EntityUtils;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;
public class HttpRequest {
//连接超时时间,默认10秒
private static final int socketTimeout = 10000;
//传输超时时间,默认30秒
private static final int connectTimeout = 30000;
/**
* post请求
* @throws IOException
* @throws ClientProtocolException
* @throws NoSuchAlgorithmException
* @throws KeyStoreException
* @throws KeyManagementException
* @throws UnrecoverableKeyException
*/
public static String sendPost(String url, Object xmlObj) throws ClientProtocolException, IOException, UnrecoverableKeyException, KeyManagementException, KeyStoreException, NoSuchAlgorithmException {
HttpPost httpPost = new HttpPost(url);
//解决XStream对出现双下划线的bug
XStream xStreamForRequestPostData = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("-_", "_")));
xStreamForRequestPostData.alias("xml", xmlObj.getClass());
//将要提交给API的数据对象转换成XML格式数据Post给API
String postDataXML = xStreamForRequestPostData.toXML(xmlObj);
//得指明使用UTF-8编码,否则到API服务器XML的中文不能被成功识别
StringEntity postEntity = new StringEntity(postDataXML, "UTF-8");
httpPost.addHeader("Content-Type", "text/xml");
httpPost.setEntity(postEntity);
//设置请求器的配置
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();
httpPost.setConfig(requestConfig);
HttpClient httpClient = HttpClients.createDefault();
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
String result = EntityUtils.toString(entity, "UTF-8");
return result;
}
/**
* 自定义证书管理器,信任所有证书
* @author pc
*
*/
public static class MyX509TrustManager implements X509TrustManager {
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] arg0, String arg1)
throws java.security.cert.CertificateException {
// TODO Auto-generated method stub
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] arg0, String arg1)
throws java.security.cert.CertificateException {
// TODO Auto-generated method stub
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
// TODO Auto-generated method stub
return null;
}
}
}
package com.ctrip.fun.golf.domain.payment;
import java.security.MessageDigest;
/**
* User: rizenguo
* Date: 2014/10/23
* Time: 15:43
*/
public class MD5 {
private final static String[] hexDigits = {"0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", "a", "b", "c", "d", "e", "f"};
/**
* 转换字节数组为16进制字串
* @param b 字节数组
* @return 16进制字串
*/
public static String byteArrayToHexString(byte[] b) {
StringBuilder resultSb = new StringBuilder();
for (byte aB : b) {
resultSb.append(byteToHexString(aB));
}
return resultSb.toString();
}
/**
* 转换byte到16进制
* @param b 要转换的byte
* @return 16进制格式
*/
private static String byteToHexString(byte b) {
int n = b;
if (n < 0) {
n = 256 + n;
}
int d1 = n / 16;
int d2 = n % 16;
return hexDigits[d1] + hexDigits[d2];
}
/**
* MD5编码
* @param origin 原始字符串
* @return 经过MD5加密之后的结果
*/
public static String MD5Encode(String origin) {
String resultString = null;
try {
resultString = origin;
MessageDigest md = MessageDigest.getInstance("MD5");
resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
} catch (Exception e) {
e.printStackTrace();
}
return resultString;
}
}
package com.ctrip.fun.golf.domain.payment;
/**
* 预订单
*
* @author zuoliangzhu
*
*/
public class OrderInfo {
private String appid;// 小程序ID
private String mch_id;// 商户号
private String nonce_str;// 随机字符串
private String sign_type;//签名类型
private String sign;// 签名
private String body;// 商品描述
private String out_trade_no;// 商户订单号
private int total_fee;// 标价金额 ,单位为分
private String spbill_create_ip;// 终端IP
private String notify_url;// 通知地址
private String trade_type;// 交易类型
private String openid;//用户标识
public String getSign_type() {
return sign_type;
}
public void setSign_type(String sign_type) {
this.sign_type = sign_type;
}
public String getOpenid() {
return openid;
}
public void setOpenid(String openid) {
this.openid = openid;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getMch_id() {
return mch_id;
}
public void setMch_id(String mch_id) {
this.mch_id = mch_id;
}
public String getNonce_str() {
return nonce_str;
}
public void setNonce_str(String nonce_str) {
this.nonce_str = nonce_str;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getOut_trade_no() {
return out_trade_no;
}
public void setOut_trade_no(String out_trade_no) {
this.out_trade_no = out_trade_no;
}
public int getTotal_fee() {
return total_fee;
}
public void setTotal_fee(int total_fee) {
this.total_fee = total_fee;
}
public String getSpbill_create_ip() {
return spbill_create_ip;
}
public void setSpbill_create_ip(String spbill_create_ip) {
this.spbill_create_ip = spbill_create_ip;
}
public String getNotify_url() {
return notify_url;
}
public void setNotify_url(String notify_url) {
this.notify_url = notify_url;
}
public String getTrade_type() {
return trade_type;
}
public void setTrade_type(String trade_type) {
this.trade_type = trade_type;
}
}
package com.ctrip.fun.golf.domain.payment;
public class OrderReturnInfo {
private String return_code;
private String return_msg;
private String result_code;
private String appid;
private String mch_id;
private String nonce_str;
private String sign;
private String prepay_id;
private String trade_type;
public String getReturn_code() {
return return_code;
}
public void setReturn_code(String return_code) {
this.return_code = return_code;
}
public String getReturn_msg() {
return return_msg;
}
public void setReturn_msg(String return_msg) {
this.return_msg = return_msg;
}
public String getResult_code() {
return result_code;
}
public void setResult_code(String result_code) {
this.result_code = result_code;
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getMch_id() {
return mch_id;
}
public void setMch_id(String mch_id) {
this.mch_id = mch_id;
}
public String getNonce_str() {
return nonce_str;
}
public void setNonce_str(String nonce_str) {
this.nonce_str = nonce_str;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getPrepay_id() {
return prepay_id;
}
public void setPrepay_id(String prepay_id) {
this.prepay_id = prepay_id;
}
public String getTrade_type() {
return trade_type;
}
public void setTrade_type(String trade_type) {
this.trade_type = trade_type;
}
}
package com.ctrip.fun.golf.domain.payment;
import java.util.Random;
/**
* 随机字符串生成
* @author zuoliangzhu
*
*/
public class RandomStringGenerator {
/**
* 获取一定长度的随机字符串
* @param length 指定字符串长度
* @return 一定长度的字符串
*/
public static String getRandomStringByLength(int length) {
String base = "abcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}
}
package com.ctrip.fun.golf.domain.payment;
import com.thoughtworks.xstream.annotations.XStreamAlias;
/**
* 签名信息
* @author zuoliangzhu
*
*/
public class SignInfo {
private String appId;//小程序ID
private String timeStamp;//时间戳
private String nonceStr;//随机串
@XStreamAlias("package")
private String repay_id;
private String signType;//签名方式
public String getAppId() {
return appId;
}
public void setAppId(String appId) {
this.appId = appId;
}
public String getTimeStamp() {
return timeStamp;
}
public void setTimeStamp(String timeStamp) {
this.timeStamp = timeStamp;
}
public String getNonceStr() {
return nonceStr;
}
public void setNonceStr(String nonceStr) {
this.nonceStr = nonceStr;
}
public String getRepay_id() {
return repay_id;
}
public void setRepay_id(String repay_id) {
this.repay_id = repay_id;
}
public String getSignType() {
return signType;
}
public void setSignType(String signType) {
this.signType = signType;
}
}
package com.ctrip.fun.golf.domain.payment;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import com.ctrip.fun.golf.domain.payment.Configure;
import com.thoughtworks.xstream.annotations.XStreamAlias;
/**
* 签名
* @author zuoliangzhu
*
*/
public class Signature {
/**
* 签名算法
* @param o 要参与签名的数据对象
* @return 签名
* @throws IllegalAccessException
*/
public static String getSign(Object o) throws IllegalAccessException {
ArrayList<String> list = new ArrayList<String>();
Class cls = o.getClass();
Field[] fields = cls.getDeclaredFields();
for (Field f : fields) {
f.setAccessible(true);
if (f.get(o) != null && f.get(o) != "") {
String name = f.getName();
XStreamAlias anno = f.getAnnotation(XStreamAlias.class);
if(anno != null)
name = anno.value();
list.add(name + "=" + f.get(o) + "&");
}
}
int size = list.size();
String [] arrayToSort = list.toArray(new String[size]);
Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER);
StringBuilder sb = new StringBuilder();
for(int i = 0; i < size; i ++) {
sb.append(arrayToSort[i]);
}
String result = sb.toString();
result += "key=" + Configure.getKey();
result = MD5.MD5Encode(result).toUpperCase();
return result;
}
public static String getSign(Map<String,Object> map){
ArrayList<String> list = new ArrayList<String>();
for(Map.Entry<String,Object> entry:map.entrySet()){
if(entry.getValue()!=""){
list.add(entry.getKey() + "=" + entry.getValue() + "&");
}
}
int size = list.size();
String [] arrayToSort = list.toArray(new String[size]);
Arrays.sort(arrayToSort, String.CASE_INSENSITIVE_ORDER);
StringBuilder sb = new StringBuilder();
for(int i = 0; i < size; i ++) {
sb.append(arrayToSort[i]);
}
String result = sb.toString();
result += "key=" + Configure.getKey();
//Util.log("Sign Before MD5:" + result);
result = MD5.MD5Encode(result).toUpperCase();
//Util.log("Sign Result:" + result);
return result;
}
}
package com.ctrip.fun.golf.domain.user;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import java.security.AlgorithmParameters;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.Security;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
public class AES {
public static boolean initialized = false;
/**
* AES解密
* @param content 密文
* @return
* @throws InvalidAlgorithmParameterException
* @throws NoSuchProviderException
*/
public static byte[] decrypt(byte[] content, byte[] keyByte, byte[] ivByte) throws InvalidAlgorithmParameterException {
initialize();
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
Key sKeySpec = new SecretKeySpec(keyByte, "AES");
cipher.init(Cipher.DECRYPT_MODE, sKeySpec, generateIV(ivByte));// 初始化
byte[] result = cipher.doFinal(content);
return result;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static void initialize(){
if (initialized) return;
Security.addProvider(new BouncyCastleProvider());
initialized = true;
}
//生成iv
public static AlgorithmParameters generateIV(byte[] iv) throws Exception{
AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
params.init(new IvParameterSpec(iv));
return params;
}
}
......@@ -217,6 +217,17 @@ public class UserExt implements java.io.Serializable {
* 普通用户的标识,对当前开发者帐号唯一
*/
private String openId;
/**
* 小程序OPENID
*/
private String miniAppOpenId;
/**
* 小程序SessionKey
*/
private String miniAppSessionKey;
/**
* 普通用户昵称
......@@ -713,8 +724,26 @@ public class UserExt implements java.io.Serializable {
public void setOpenId(String openId) {
this.openId = openId;
}
@Column(name = "miniAppOpenId", length = 128)
public String getMiniAppOpenId() {
return miniAppOpenId;
}
public void setMiniAppOpenId(String miniAppOpenId) {
this.miniAppOpenId = miniAppOpenId;
}
@Column(name = "miniAppSessionKey", length = 128)
public String getMiniAppSessionKey() {
return miniAppSessionKey;
}
public void setMiniAppSessionKey(String miniAppSessionKey) {
this.miniAppSessionKey = miniAppSessionKey;
}
@Column(name = "nickName", length = 50)
@Column(name = "nickName", length = 50)
public String getNickName() {
return nickName;
}
......
......@@ -19,7 +19,6 @@ import com.ctrip.fun.common.core.util.DateUtil;
import com.ctrip.fun.common.core.util.JsonUtil;
import com.ctrip.fun.common.core.util.StringUtils;
import com.ctrip.fun.common.vo.PagedResponseBean;
import com.ctrip.fun.common.vo.Request;
import com.ctrip.fun.common.vo.Response;
import com.ctrip.fun.common.vo.ResponseStatusEnum;
import com.ctrip.fun.common.vo.basic.AbstractRuleConditionBean;
......@@ -31,18 +30,23 @@ import com.ctrip.fun.common.vo.basic.MallProductRuleConditionBean;
import com.ctrip.fun.common.vo.basic.MultipleCourseConditionBean;
import com.ctrip.fun.common.vo.basic.SmsStatus;
import com.ctrip.fun.common.vo.basic.SmsType;
import com.ctrip.fun.common.vo.basic.VoucherGetLogBean;
import com.ctrip.fun.common.vo.basic.VoucherItemDTO;
import com.ctrip.fun.common.vo.basic.VoucherQueryDto;
import com.ctrip.fun.common.vo.basic.VoucherQueryFormDTO;
import com.ctrip.fun.common.vo.basic.VoucherQueryRequestDTO;
import com.ctrip.fun.common.vo.basic.VoucherRuleMultiEnum;
import com.ctrip.fun.common.vo.basic.VoucherShareLogBean;
import com.ctrip.fun.common.vo.basic.VoucherSourceEnum;
import com.ctrip.fun.common.vo.basic.VoucherTypeEnum;
import com.ctrip.fun.common.vo.basic.VourcherUsedEnum;
import com.ctrip.fun.golf.dao.assemble.AsmCourseResourceDao;
import com.ctrip.fun.golf.dao.basic.OperationMessageDao;
import com.ctrip.fun.golf.dao.basic.SmsDao;
import com.ctrip.fun.golf.dao.basic.VoucherDao;
import com.ctrip.fun.golf.dao.basic.VoucherGetLogDao;
import com.ctrip.fun.golf.dao.basic.VoucherRuleDao;
import com.ctrip.fun.golf.dao.basic.VoucherShareLogDao;
import com.ctrip.fun.golf.dao.order.EventActivityOrderItemDao;
import com.ctrip.fun.golf.dao.order.OrderDao;
import com.ctrip.fun.golf.dao.product.CourseResourceDao;
......@@ -50,9 +54,9 @@ import com.ctrip.fun.golf.dao.tour.TourBasicDao;
import com.ctrip.fun.golf.domain.basic.OperationMessage;
import com.ctrip.fun.golf.domain.basic.Sms;
import com.ctrip.fun.golf.domain.basic.Voucher;
import com.ctrip.fun.golf.domain.basic.VoucherGetLog;
import com.ctrip.fun.golf.domain.basic.VoucherRule;
import com.ctrip.fun.golf.domain.order.EventActivityOrderItem;
import com.ctrip.fun.golf.domain.order.Order;
import com.ctrip.fun.golf.domain.basic.VoucherShareLog;
import com.ctrip.fun.golf.domain.product.CourseResource;
import com.ctrip.fun.golf.domain.tour.TourBasic;
import com.ctrip.fun.golf.exceptions.VoucherException;
......@@ -66,6 +70,8 @@ public class VoucherService {
private static final String VOUCHER_MALL_SUBTITLE_FORMAT = "满%s元使用";
private VoucherDao voucherDao = null;
private VoucherShareLogDao voucherShareLogDao = null;
private VoucherGetLogDao voucherGetLogDao = null;
private VoucherRuleDao voucherRuleDao = null;
private AsmCourseResourceDao asmCourseResourceDao = null;
private CourseResourceDao courseResourceDao = null;
......@@ -649,7 +655,88 @@ public class VoucherService {
pagedResponseBean.setResult(result);
return pagedResponseBean;
}
public PagedResponseBean<VoucherItemDTO> queryListForMiniApps(VoucherQueryDto queryBean) {
return voucherDao.queryListForMiniApps(queryBean);
}
public Response<VoucherShareLogBean> shareVoucherForMiniApps(VoucherShareLogBean queryBean) {
Response<VoucherShareLogBean> response = new Response<VoucherShareLogBean>();
//1:改变被分享券的状态
String[] voucherIds = queryBean.getVoucherIds().split(",");
for(String voucherId:voucherIds){
voucherDao.updateVoucherIsShare(Integer.parseInt(voucherId));
}
//2:增加分享记录
VoucherShareLog voucherShareLog = new VoucherShareLog();
BeanConverter.copyProperties(voucherShareLog, queryBean);
voucherShareLog.setCreateTime(new Date());
voucherShareLog.setStatus(1);
voucherShareLogDao.save(voucherShareLog);
//3:返回分享记录
queryBean.setId(voucherShareLog.getId());
response.setStatus(1);
response.setMessage("分享成功");
response.setBody(queryBean);
return response;
}
//小程序取消分享券的操作
public Response<String> cancelShareVoucherForMiniApps(VoucherShareLogBean queryBean) {
//改分享状态为取消状态
VoucherShareLog voucherShareLog = voucherShareLogDao.findById(queryBean.getId());
voucherShareLog.setStatus(2);
voucherShareLogDao.update(voucherShareLog);
//改分享的券状态为非分享中
String[] voucherIds = voucherShareLog.getVoucherIds().split(",");
for(String voucherId:voucherIds){
voucherDao.updateVoucherNotIsShare(Integer.parseInt(voucherId));
}
Response<String> response = new Response<String>();
//3:返回分享记录
response.setStatus(1);
response.setMessage("取消分享成功");
response.setBody("success");
return response;
}
//小程序获取券分享记录
public Response<VoucherShareLogBean> getShareVoucherLogForMiniApps(VoucherShareLogBean queryBean) {
Response<VoucherShareLogBean> response = new Response<VoucherShareLogBean>();
VoucherShareLog voucherShareLog = voucherShareLogDao.findById(queryBean.getId());
List<VoucherItemDTO> list = voucherDao.queryListByIdsForMiniApps(voucherShareLog.getVoucherIds());
queryBean.setVoucherList(list);
queryBean.setUid(voucherShareLog.getUid());
response.setStatus(1);
response.setMessage("获取分享记录成功");
response.setBody(queryBean);
return response;
}
//被分享用户抢券
public Response<String> getSharedVoucherForMiniApps(VoucherGetLogBean voucherGetLogBean) {
Response<String> response = new Response<String>();
//分享的券标记为已经使用
Voucher voucher = voucherDao.findById(voucherGetLogBean.getVoucherid());
voucherDao.updateVoucherIsShared(voucherGetLogBean.getVoucherid());
//抢券人增加一张券
Voucher newVoucher = new Voucher();
BeanConverter.copyProperties(newVoucher, voucher);
newVoucher.setUid(voucherGetLogBean.getUid());
newVoucher.setUsed(0);
newVoucher.setSource(VoucherSourceEnum.RULE_FRIEND_PRESENT.getValue());
voucherDao.save(newVoucher);
//抢券表中增加一条记录
VoucherGetLog voucherGetLog = new VoucherGetLog();
BeanConverter.copyProperties(voucherGetLog, voucherGetLogBean);
voucherGetLog.setGetTime(new Date());
voucherGetLogDao.save(voucherGetLog);
//设置状态
response.setStatus(1);
response.setMessage("抢券成功");
response.setBody("success");
return response;
}
public Response<VoucherItemDTO> executeGetRedeemCodeForMallOrder(VoucherQueryDto query) {
Response<VoucherItemDTO> response = new Response<VoucherItemDTO>();
Voucher voucher = voucherDao.getByRedeemCode(query.getRedeemCode());
......@@ -844,4 +931,20 @@ public class VoucherService {
this.tourBasicDao = tourBasicDao;
}
public VoucherShareLogDao getVoucherShareLogDao() {
return voucherShareLogDao;
}
public void setVoucherShareLogDao(VoucherShareLogDao voucherShareLogDao) {
this.voucherShareLogDao = voucherShareLogDao;
}
public VoucherGetLogDao getVoucherGetLogDao() {
return voucherGetLogDao;
}
public void setVoucherGetLogDao(VoucherGetLogDao voucherGetLogDao) {
this.voucherGetLogDao = voucherGetLogDao;
}
}
......@@ -1122,7 +1122,7 @@ public abstract class AbstractOrderService<H extends AbstractOrderBean<T>, T> ex
* @param abstractOrderBean H
* @return Order 保存生成的订单
*/
private Order saveOrder(H abstractOrderBean) {
protected Order saveOrder(H abstractOrderBean) {
Order order = new Order();
if (abstractOrderBean.getCashRebate() == null) {
abstractOrderBean.setCashRebate(new BigDecimal(0));
......
......@@ -34,17 +34,27 @@ import com.ctrip.fun.common.vo.order.UserCommuneOrderStatusEnum;
import com.ctrip.fun.common.vo.product.ProductPaymentTypeEnum;
import com.ctrip.fun.golf.dao.client.ClientConfigDao;
import com.ctrip.fun.golf.dao.order.CommuneOrderItemDao;
import com.ctrip.fun.golf.dao.user.UserExtDao;
import com.ctrip.fun.golf.domain.basic.Voucher;
import com.ctrip.fun.golf.domain.basic.VoucherRule;
import com.ctrip.fun.golf.domain.client.ClientConfig;
import com.ctrip.fun.golf.domain.order.CommuneOrderItem;
import com.ctrip.fun.golf.domain.order.Order;
import com.ctrip.fun.golf.domain.payment.Configure;
import com.ctrip.fun.golf.domain.payment.HttpRequest;
import com.ctrip.fun.golf.domain.payment.OrderInfo;
import com.ctrip.fun.golf.domain.payment.OrderReturnInfo;
import com.ctrip.fun.golf.domain.payment.RandomStringGenerator;
import com.ctrip.fun.golf.domain.payment.SignInfo;
import com.ctrip.fun.golf.domain.payment.Signature;
import com.ctrip.fun.golf.domain.user.UserExt;
import com.ctrip.fun.golf.exceptions.OrderException;
import com.ctrip.fun.golf.service.basic.OperationMessageService;
import com.ctrip.fun.golf.service.market.CommuneInviteActivityService;
import com.ctrip.fun.golf.utils.JobUtil;
import com.ctrip.fun.golf.vo.PagedEntityBean;
import com.thoughtworks.xstream.XStream;
/**
* @content
......@@ -71,6 +81,8 @@ public class CommuneOrderService extends AbstractOrderService<CommuneOrderBean,
private ClientConfigDao clientConfigDao = null;
......@@ -212,7 +224,58 @@ public class CommuneOrderService extends AbstractOrderService<CommuneOrderBean,
orderItem.setCommuneYears(communeOrderBean.getCommuneYears());
communeOrderItemDao.save(orderItem);
}
public JSONObject placeOrderForMiniApp(CommuneOrderBean communeOrderBean) throws Exception{
this.checkParameters(communeOrderBean);
if (this.beforePlaceOrder(communeOrderBean)) {
Order order = this.saveOrder(communeOrderBean);
this.saveOrderItems(communeOrderBean, order.getOrderId());
}
UserExt userExt = getUserExtDao().getByUid(communeOrderBean.getUid());
String prepay_id = this.xiaDan(userExt.getMiniAppOpenId());
JSONObject json = this.sign(prepay_id);
return json;
}
private String xiaDan(String openid) throws Exception{
OrderInfo order = new OrderInfo();
order.setAppid(Configure.getAppID());
order.setMch_id(Configure.getMch_id());
order.setNonce_str(RandomStringGenerator.getRandomStringByLength(32));
order.setBody("dfdfdf");
order.setOut_trade_no(RandomStringGenerator.getRandomStringByLength(32));
order.setTotal_fee(1);
order.setSpbill_create_ip("123.57.218.54");
order.setNotify_url("https://www.see-source.com/weixinpay/PayResult");
order.setTrade_type("JSAPI");
order.setOpenid(openid);
order.setSign_type("MD5");
//生成签名
String sign = Signature.getSign(order);
order.setSign(sign);
String result = HttpRequest.sendPost("https://api.mch.weixin.qq.com/pay/unifiedorder", order);
XStream xStream = new XStream();
xStream.alias("xml", OrderReturnInfo.class);
OrderReturnInfo returnInfo = (OrderReturnInfo)xStream.fromXML(result);
return returnInfo.getPrepay_id();
}
private JSONObject sign(String repay_id) throws Exception{
SignInfo signInfo = new SignInfo();
signInfo.setAppId(Configure.getAppID());
long time = System.currentTimeMillis()/1000;
signInfo.setTimeStamp(String.valueOf(time));
signInfo.setNonceStr(RandomStringGenerator.getRandomStringByLength(32));
signInfo.setRepay_id("prepay_id="+repay_id);
signInfo.setSignType("MD5");
String sign = Signature.getSign(signInfo);
JSONObject json = new JSONObject();
json.put("timeStamp", signInfo.getTimeStamp());
json.put("nonceStr", signInfo.getNonceStr());
json.put("package", signInfo.getRepay_id());
json.put("signType", signInfo.getSignType());
json.put("paySign", sign);
return json;
}
@Override
protected void afterPlaceOrder(CommuneOrderBean abstractOrderBean, Integer orderId) {
}
......
......@@ -2,6 +2,12 @@
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
<bean name="voucherShareLogDao" class="com.ctrip.fun.golf.dao.basic.VoucherShareLogDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean name="voucherGetLogDao" class="com.ctrip.fun.golf.dao.basic.VoucherGetLogDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean name="voucherDao" class="com.ctrip.fun.golf.dao.basic.VoucherDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
......@@ -85,6 +91,8 @@
</bean>
<bean name="voucherService" class="com.ctrip.fun.golf.service.basic.VoucherService">
<property name="voucherGetLogDao" ref="voucherGetLogDao"></property>
<property name="voucherShareLogDao" ref="voucherShareLogDao"></property>
<property name="voucherDao" ref="voucherDao"></property>
<property name="asmCourseResourceDao" ref="asmCourseResourceDao"></property>
<property name="voucherRuleDao" ref="voucherRuleDao"></property>
......
......@@ -11,12 +11,13 @@
<property name="connection.autocommit">false</property>
<property name="format_sql">true</property>
<!-- <property name="hibernate.hbm2ddl.auto">update</property> -->
<mapping class="com.ctrip.fun.golf.domain.basic.VoucherGetLog" />
<mapping class="com.ctrip.fun.golf.domain.basic.District" />
<mapping class="com.ctrip.fun.golf.domain.basic.EntityImage" />
<mapping class="com.ctrip.fun.golf.domain.basic.EntityTag" />
<mapping class="com.ctrip.fun.golf.domain.basic.SubDistrict" />
<mapping class="com.ctrip.fun.golf.domain.basic.Tag" />
<mapping class="com.ctrip.fun.golf.domain.basic.VoucherShareLog" />
<mapping class="com.ctrip.fun.golf.domain.basic.Recommend" />
<mapping class="com.ctrip.fun.golf.domain.basic.OutsideUser" />
<mapping class="com.ctrip.fun.golf.domain.basic.PrePayCard"/>
......
......@@ -34,3 +34,6 @@ umeng.accessToken=/fun-common-soa/umeng/accessToken
#rongyun
rongyun.getToken=/fun-common-soa/rongyun/getToken
rongyun.refreshName=/fun-common-soa/rongyun/refreshName
#weixin
uri.weiXin.jscodeToSessionPath=/fun-common-soa/weiXin/jscodeToSessionPath
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment