您的位置:首页 > 编程语言 > Java开发

支付宝(移动支付)服务端java版

2016-12-28 17:13 351 查看
所需支付宝jar包: sdk2-2.0.jar(点击下载)

工具类目录结构:点击下载



商户信息已经公钥私钥的配置(公钥私钥的生成与支付宝商户平台配置请看官方文档:https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.nBDxfy&treeId=58&articleId=103242&docType=1、https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.BfaKdz&treeId=58&articleId=103578&docType=1),

AlipayConfig

packagecom.rpframework.module.common.pay.alipay.config;

publicclassAlipayConfig{

//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//合作身份者ID,以2088开头由16位纯数字组成的字符串
publicstaticStringpartner="2088...";
//商户的私钥
publicstaticStringprivate_key="MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKXcJq3Aj7uwht...";
publicstaticStringseller_email="2088...";

//支付宝的公钥
publicstaticStringali_public_key="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnxj/9qwVfgoUh/y2W89...";
//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

//调试用,创建TXT日志文件夹路径
publicstaticStringlog_path="D:\\";

//字符编码格式目前支持gbk或utf-8
publicstaticStringinput_charset="utf-8";

//签名方式
publicstaticStringsign_type="RSA";

}


PayUtils


packagecom.rk.shows.util;

importcom.rk.shows.util.alipay.config.AlipayConfig;
importcom.rk.shows.util.alipay.util.SignUtils;

importjava.io.UnsupportedEncodingException;
importjava.net.URLEncoder;

/**
*
*支付基本信息
*@authorzhangli
*@date2016年3月28日下午2:35:24
*
*
*1.需要支付的信息:
*用户支付支付相关业务支付金额回调业务
*2.第三方支付需要的信息:
*trade_no,subject,body,total_fee,notify_url
*
*/
publicclassPayUtils{

publicstaticStringsign(Stringcontent,StringRSA_PRIVATE){
returnSignUtils.sign(content,RSA_PRIVATE);
}

/**
*支付宝支付
*@paramtrade_no订单号
*@paramtotal_fee金额
*@paramsubject标题
*@parambody内容
*@paramnotify_url回调地址
*@return
*@throwsUnsupportedEncodingException
*/
publicstaticStringAliPay(Stringtrade_no,Doubletotal_fee,Stringsubject,Stringbody,Stringnotify_url)throwsUnsupportedEncodingException{
StringorderInfo="_input_charset=\"utf-8\"";
orderInfo+="&body="+"\""+body+"\"";
orderInfo+="&it_b_pay=\"30m\"";
orderInfo+="¬ify_url="+"\""+notify_url+"\"";
orderInfo+="&out_trade_no="+"\""+trade_no+"\"";
orderInfo+="&partner="+"\""+AlipayConfig.partner+"\"";
orderInfo+="&payment_type=\"1\"";
orderInfo+="&return_url=\""+notify_url+"\"";
orderInfo+="&seller_id="+"\""+AlipayConfig.seller_email+"\"";
orderInfo+="&service=\"mobile.securitypay.pay\"";
orderInfo+="&subject="+"\""+subject+"\"";
Stringformat=String.format("%.2f",total_fee);
if(format.indexOf(",")>0)format=format.replace(",",".");
orderInfo+="&total_fee="+"\""+format+"\"";
System.out.println(orderInfo);
Stringsign=sign(orderInfo,AlipayConfig.private_key);
sign=URLEncoder.encode(sign,"utf-8");
returnorderInfo+"&sign=\""+sign+"\"&"+"sign_type=\"RSA\"";
}
}


接口controller:

packagecom.textile.controller;

importcom.rpframework.core.json.FailException;
importcom.rpframework.core.json.JsonResp;
importcom.rpframework.core.json.ParameterException;
importcom.rpframework.module.common.bottom.controller.BaseController;
importcom.rpframework.module.common.pay.alipay.util.AlipayNotify;
importcom.rpframework.module.common.url.RequestDescription;
importcom.textile.dto.MoneyDto;
importcom.textile.entity.MemberIntroduction;
importcom.textile.entity.MoneyRecord;
importcom.textile.entity.User;
importcom.textile.service.MemberIntroductionService;
importcom.textile.service.MoneyRecordService;
importcom.textile.service.UserService;
importcom.textile.util.PayUtils;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Controller;
importorg.springframework.transaction.annotation.Transactional;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.ResponseBody;

importjavax.servlet.http.HttpServletRequest;
importjava.io.ByteArrayOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.math.BigDecimal;
importjava.util.*;

/**
*Createdbybinon2016/11/16.
*/
@ResponseBody
@Controller
@RequestMapping
publicclassMoneyController{

//http://139.224.42.24:8899
//http://tt.tunnel.2bdata.com
publicstaticStringalinotify="/api/json/money/alipay/succ";

@RequestMapping
@RequestDescription("支付宝支付回调地址")
@Transactional(rollbackFor=Throwable.class)
publicStringalipaySucc(HttpServletRequestrequest)throwsIOException{
System.out.println("支付宝回调");
Map<String,String>params=newHashMap<>();
Map<String,String[]>requestParams=request.getParameterMap();
for(Iterator<String>iter=requestParams.keySet().iterator();iter.hasNext();){
Stringname=iter.next();
String[]values=requestParams.get(name);
StringvalueStr="";
for(inti=0;i<values.length;i++){
valueStr=(i==values.length-1)?valueStr+values[i]:valueStr+values[i]+",";
}
//乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化
//valueStr=newString(valueStr.getBytes("ISO-8859-1"),"gbk");
params.put(name,valueStr);
}
//Stringout_trade_no=request.getParameter("out_trade_no");//商户订单号

//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以下仅供参考)//
//商户订单号

//Stringout_trade_no=newString(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");

//支付宝交易号

//Stringtrade_no=newString(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");

//交易状态
Stringtrade_status=newString(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");

//获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表(以上仅供参考)//

if(AlipayNotify.verify(params)){//验证成功
//////////////////////////////////////////////////////////////////////////////////////////
//请在这里加上商户的业务逻辑程序代码

//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——

if(trade_status.equals("TRADE_FINISHED")){
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
//如果有做过处理,不执行商户的业务程序

//注意:
//退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
}elseif(trade_status.equals("TRADE_SUCCESS")){
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
//如果有做过处理,不执行商户的业务程序

//注意:
//付款完成后,支付宝系统发送该交易状态通知

Stringtotal_fee=params.get("total_fee");
LonguserId=Long.valueOf(params.get("out_trade_no").split("O")[0]);
//updateUserPay(userId,total_fee);
return"success";
}
//——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
//////////////////////////////////////////////////////////////////////////////////////////
}else{//验证失败
System.out.println("+++++++++++++++++++=验证失败");
return"fail";
}
return"fail";
}

  /*
privatevoidupdateUserPay(LonguserId,Stringtotal_fee){
Useruser=userService.selectByPrimaryKey(userId);

if(user!=null){
user.setPassword(null);
//余额
BigDecimalaccount=user.getAccount()==null?BigDecimal.valueOf(0.00):user.getAccount();
user.setAccount(account.add(BigDecimal.valueOf(Double.valueOf(total_fee))));
//积分
//BigDecimalintegral=user.getIntegral()==null?BigDecimal.valueOf(0.00):user.getIntegral();
//user.setIntegral(integral.add(BigDecimal.valueOf(Double.valueOf(total_fee))));
inti=userService.updateByPrimaryKeySelective(user);
if(i<=0){
log.debug("更新用户出错");
}

//充值记录
MoneyRecordmoneyRecord=newMoneyRecord();
moneyRecord.setTitle("充值");
moneyRecord.setType(1);
moneyRecord.setMoneyChange("+"+total_fee);
moneyRecord.setUserId(userId);

moneyRecordService.insertJson(moneyRecord);
log.debug("记录添加成功");
}
}
  */

@RequestMapping
@RequestDescription("支付宝充值")
@Transactional(rollbackFor=Throwable.class)
publicJsonResp<?>getAlipayOrderSign(Doublemoney,HttpServletRequestrequest)throwsException{
Stringsym=request.getRequestURL().toString().split("/api/")[0];
LonguserId=baseController.getUserId();
Stringtrade_no0=userId+"O"+UUID.randomUUID().toString().replaceAll("-","").toLowerCase();
Stringtrade_no=trade_no0.substring(0,32);
StringstringStringMap=null;
stringStringMap=PayUtils.AliPay(
trade_no,
money,     //金额
"纺织达人充值",//订单名称
"纺织达人充值",//订单说明
sym+alinotify//回调哪个方法
);
if(stringStringMap!=null){
str=stringStringMap.substring(17,stringStringMap.length()-3);
}

JsonResp<String>jsonResp=newJsonResp<>();
if(stringStringMap!=null){
returnjsonResp.data(stringStringMap);
}else{
thrownewFailException();
}

}

}


官方文档:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.VbKyV2&treeId=59&articleId=103563&docType=1

参考资料:

技术客服:
https://cschannel.alipay.com/newPortal.htm?scene=mt_zczx&token=&pointId=&enterurl=https%3A%2F%2Fsupport.open.alipay.com%2Falipay%2Fsupport%2Findex.htm

教程
http://blog.csdn.net/xingzizhanlan/article/details/52709899
公钥私钥:
https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.nBDxfy&treeId=58&articleId=103242&docType=1
文档:
https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.rnMrxU&treeId=193&articleId=105465&docType=1

http://www.cnblogs.com/xu-xiang/p/5797643.html

网页支付:
http://www.jb51.net/article/88127.htm

支付宝和微信支付:
简书:http://www.jianshu.com/p/a4f515387264

12.2:
支付宝支付:
http://blog.csdn.net/fengshizty/article/details/53215196

app支付和移动支付的疑问:

http://www.cnblogs.com/harris-peng/p/6007020.html


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: