验证中...
语言: Java
分类: 常用工具包
最后更新于 2018-02-07 11:08
片段 1 片段 2 片段 3
gistfile1.txt
原始数据 复制代码
/**
* 接口编号【126】 接口描述【支付宝充值】
*
* @param price充值金额
* @return
* @throws Exception
*/
@RequestMapping(value = "v1/alipay_recharge", method = RequestMethod.POST)
public @ResponseBody
RespValue<Object> recharge(String price, HttpServletRequest request)
throws Exception {
if (this.unlawfulRequest(126, request)) {
return new RespValue<Object>(null, RespCode.UNLAWFULREQ);
}
if (StringUtils.isNull(price)) {
throw new ServiceException("金额不能为空!");
}
UserLogin userLogin = (UserLogin) request.getSession().getAttribute(
"userLogin");
if (null == userLogin) {
return new RespValue<Object>(null, RespCode.TIMEOUT);
}
PayInfo payInfo = new PayInfo();
payInfo.setSubject("会员充值");
payInfo.setBody("会员充值_" + userLogin.getId());
payInfo.setTotal_fee(price + "");
payInfo.setOut_trade_no(StringUtils.getBetOrderNo());
String str = AlipayOrderInfo.getFullPayInfo(payInfo);
return new RespValue<Object>(str, "获取成功", RespValue.SUCCESS);
}
/**
* APP支付宝充值【异步回调方法】
*
* @param request
* @param response
* @throws Exception
*/
@SuppressWarnings({ "unused", "rawtypes" })
@RequestMapping(value = "v1/app_notify_url", method = RequestMethod.POST)
public void app_notify_url(HttpServletRequest request,
HttpServletResponse response) throws Exception {
Map<String, String> params = new HashMap<String, String>();
Map requestParams = request.getParameterMap();
for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
// 乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
params.put(name, valueStr);
}
// 获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//
// 商户订单号
String out_trade_no = request.getParameter("out_trade_no");
// 支付宝交易号
String trade_no = request.getParameter("trade_no");
// 交易状态
String trade_status = request.getParameter("trade_status");
// 商品描述
String body = new String(request.getParameter("body"));
// 买家支付宝账号
String buyer_logon_id = request.getParameter("buyer_logon_id");
// 支付金额
String total_fee = request.getParameter("total_fee");
// 计算得出通知验证结果
boolean verify_result = AlipayNotify.verify(params);
String businessType = "";// 业务类型
String memberId = "";// 会员ID
if (body.indexOf("_") > -1) {
String[] bodys = body.split("_");
businessType = bodys[0];
memberId = bodys[1];
}
if (verify_result) {// 验证成功,修改订单状态。
if (trade_status.equals("TRADE_SUCCESS")) {// 这笔交易成功
if (businessType.equals("会员充值") && memberId.length() > 0) {
// -----------------修改用户充值记录----------------//
PayInfo pay = new PayInfo();
pay.setAddtime(new Date());
pay.setBody(body);
pay.setMemberId(memberId);
pay.setOut_trade_no(out_trade_no);
pay.setPaytype(3);
pay.setTotal_fee(total_fee);
pay.setTradeno(trade_no);
pay.setBuz_type(businessType);
pay.setPlatformsetid(1 + "");
userService.recharge(pay);
}
}
// 异步通知,返回支付宝。
try {
response.getWriter().print("success");// 请不要修改或删除
} catch (IOException e) {
e.printStackTrace();
}
}
}
PayInfo.java
原始数据 复制代码
package com.lottery.alipay.utils;
import java.io.Serializable;
import java.util.Date;
/**
* 封装订单的一些参数
* @author chenp
*
*/
public class PayInfo implements Serializable{
private static final long serialVersionUID = 8798104746375181799L;
/**
* 对一笔交易的具体描述信息【非必填】
*/
public String body;
/**
* 商品的标题
*/
public String subject;
/**
* 商户网站唯一订单号
*/
public String out_trade_no;
/**
* 总金额【微信以分为单位】
*/
public String total_fee;
/**
* 业务类型
*/
public String buz_type;
/**
* 会员ID
*/
public String memberId;
/**
* 余额
*/
public String balance;
/**
* 流水号
*/
public String tradeno;
/**
* 支付类型【 1-支付宝 2-微信 3-百度钱包 4-QQ钱包 5-京东钱包】
*/
public int paytype;
/**
* 支付时间
*/
public Date addtime=new Date();
/**
* 支付平台设置id
*/
public String platformsetid;
/**
* 优惠金额
*/
public String giftmoney="0";
public String getGiftmoney() {
return giftmoney;
}
public void setGiftmoney(String giftmoney) {
this.giftmoney = giftmoney;
}
public String getBalance() {
return balance;
}
public void setBalance(String balance) {
this.balance = balance;
}
public String getMemberId() {
return memberId;
}
public void setMemberId(String memberId) {
this.memberId = memberId;
}
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 String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getTotal_fee() {
return total_fee;
}
public void setTotal_fee(String total_fee) {
this.total_fee = total_fee;
}
public String getBuz_type() {
return buz_type;
}
public void setBuz_type(String buz_type) {
this.buz_type = buz_type;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getTradeno() {
return tradeno;
}
public void setTradeno(String tradeno) {
this.tradeno = tradeno;
}
public int getPaytype() {
return paytype;
}
public void setPaytype(int paytype) {
this.paytype = paytype;
}
public Date getAddtime() {
return addtime;
}
public void setAddtime(Date addtime) {
this.addtime = addtime;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public String getPlatformsetid() {
return platformsetid;
}
public void setPlatformsetid(String platformsetid) {
this.platformsetid = platformsetid;
}
}
AlipayOrderInfo.java
原始数据 复制代码
package com.lottery.alipay.utils;
import java.net.URLEncoder;
import com.lottery.common.view.RespValue;
/**
* 支付宝订单信息
* @author chenp
*
*/
public class AlipayOrderInfo {
/**
* 获取完整的符合支付宝参数规范的订单信息
*
* @return
*/
public static String getFullPayInfo(PayInfo payInfo) {
String orderInfo = getPayForOrderInfo(payInfo.getSubject(),
payInfo.getBody(), payInfo.getTotal_fee(),
payInfo.getOut_trade_no());
// 特别注意,这里的签名逻辑需要放在服务端,切勿将私钥泄露在代码中!
String sign = sign(orderInfo);
try {
// 仅需对sign 做URL编码
sign = URLEncoder.encode(sign, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
// 完整的符合支付宝参数规范的订单信息
return orderInfo + "&sign=\"" + sign + "\"&" + getSignType();
}
public static String sign(String content) {
return SignUtils.sign(content, AlipayConfig.RSA_PRIVATE);
}
/**
* 签名方式
* @return
*/
public static String getSignType() {
return "sign_type=\"RSA\"";
}
/**
* 返回app的支付信息
*
* @param subject
* @param body
* @param price
* @param orderId
* @return
*/
public static String getPayForOrderInfo(String subject, String body, String price, String orderId) {
// 签约合作者身份ID
String orderInfo = "partner=" + "\"" + AlipayConfig.partner + "\"";
// 签约卖家支付宝账号
orderInfo += "&seller_id=" + "\"" + AlipayConfig.seller_id + "\"";
// 商户网站唯一订单号
orderInfo += "&out_trade_no=" + "\"" + orderId + "\"";
// 商品名称
orderInfo += "&subject=" + "\"" + subject + "\"";
// 商品详情
orderInfo += "&body=" + "\"" + body + "\"";
// 商品金额
orderInfo += "&total_fee=" + "\"" + price + "\"";
// 服务器异步通知页面路径
orderInfo += "&notify_url=" + "\"" + AlipayConfig.notify_url_app + "\"";
// 服务接口名称, 固定值
orderInfo += "&service=\"mobile.securitypay.pay\"";
// 支付类型, 固定值
orderInfo += "&payment_type=\"1\"";
// 参数编码, 固定值
orderInfo += "&_input_charset=\"utf-8\"";
// 设置未付款交易的超时时间
// 默认30分钟,一旦超时,该笔交易就会自动被关闭。
// 取值范围:1m~15d。
// m-分钟,h-小时,d-天,1c-当天(无论交易何时创建,都在0点关闭)。
// 该参数数值不接受小数点,如1.5h,可转换为90m。
orderInfo += "&it_b_pay=\"30m\"";
// extern_token为经过快登授权获取到的alipay_open_id,带上此参数用户将使用授权的账户进行支付
// orderInfo += "&extern_token=" + "\"" + extern_token + "\"";
// 支付宝处理完请求后,当前页面跳转到商户指定页面的路径,可空
orderInfo += "&return_url=" + "\"" + AlipayConfig.return_url_app + "\"";
// 调用银行卡支付,需配置此参数,参与签名, 固定值 (需要签约《无线银行卡快捷支付》才能使用)
// orderInfo += "&paymethod=\"expressGateway\"";
return orderInfo;
}
}

评论列表( 0 )

你可以在登录后,对此项目发表评论

6_float_left_people 6_float_left_close