支付宝的集成与使用(第三方)
2016-10-24 15:48
357 查看
app开发中总是用到支付宝的集成,这个总结一下流程
一、1、https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103563&docType=1
在这个链接下载移动支付demo(里面有三部分--openssl、服务端demo---可以将相应的demo引入工程中,有包的话注意包的引入、客户端demo)
--AlipayConfig.java这个文件要兑换相应的自己应用的信息
eg:
public static String partner =“pid”---这个需要修改
public static String private_key=“商户私钥”--这个需要修改
public static String ali_public_key=“支付宝公钥”----这个一般不需要修改--在合作伙伴秘钥管理--查看支付宝公钥就可以看到
2、生成相应的公钥、秘钥,一般下载的demo中就有生成说明
3、登录支付宝账户--用显示让你去签约--点击立即签约-签约管理--(就会看到你账户的签约产品(已经有签约的话))
4、在你的商户下面有查看pid 、key 点击需要输入支付密码--输入支付密码、就可以查看pid 、合作伙伴秘钥管理(在它下面rsa加密--点击添加密钥---将你生成的公钥加进去)
这样就可以和前端联调了
二、前端主要用到
支付宝账户、pid、生成的秘钥
三、微信回调
public Map<String, Object> weiXinPayOrderBack(HttpServletRequest request,
HttpServletResponse response) throws Exception {
Map<String,Object> resultMap = new HashMap<String,Object>();
// log.info("---------------微信支付通知接口【start】---------------");
String responseXML = "";
// HttpServletRequest request = this.getRequest();
// HttpServletResponse response = this.getResponse();
response.setContentType("text/html;charset=utf-8");
String return_code = "";
String result_code = "";
// 用户openid
String openid = "";
// 商户订单号
String out_trade_no = "";
// 微信交易订单号
String transaction_id = "";
// 交易完成时间
String time_end = "";
// 商家附加参数数据,微信会原样返回
String attach = "";
try {
InputStream inStream = request.getInputStream();
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outSteam.write(buffer, 0, len);
}
outSteam.close();
inStream.close();
String result = new String(outSteam.toByteArray(), "utf-8");// 获取微信调用我们notify_url的返回信息
// log.info("-----result-----" + result);
Map<Object, Object> map = XMLUtil.doXMLParse(result);
// log.info("-----map.size()-----" + map.size());
if (map != null) {
for (Object keyValue : map.keySet()) {
// log.info("-----keyValue-----" + keyValue + "="
// + map.get(keyValue));
switch (keyValue.toString()) {
case "return_code":
return_code = (String) map.get(keyValue);
break;
case "result_code":
result_code = (String) map.get(keyValue);
break;
case "openid":
openid = (String) map.get(keyValue);
break;
case "out_trade_no":
out_trade_no = (String) map.get(keyValue);
break;
case "transaction_id":
transaction_id = (String) map.get(keyValue);
break;
case "time_end":
time_end = (String) map.get(keyValue);
break;
case "attach":
attach = (String) map.get(keyValue);
break;
}
}
if ("SUCCESS".equals(return_code)
&& "SUCCESS".equals(result_code)) {
out_trade_no = out_trade_no.substring(0, 20); // 截取原始订单号
// log.info("-----out_trade_no(截取原始订单号)-----" + result);
// ------支付成功,修改订单状态等业务操作--------
updateOrderPay(out_trade_no);
// if (isUpdate) {
// log.info("--------------更新订单状态成功!--------------");
// } else {
// log.info("--------------更新订单状态失败!--------------");
// }
// log.info("--------------更新订单状态--------结束------");
// 向微信返回成功接收信息
responseXML = PayCommonUtil.setXML("SUCCESS", "");
resultMap.put("code", "200");
resultMap.put("msg", "支付成功");
// log.info("---------------微信支付通知接口【success】---------------");
} else {
// log.info("微信支付通知失败====无返回数据######");
responseXML = PayCommonUtil.setXML("FAIL", "");
resultMap.put("code", "500");
resultMap.put("msg", "支付失败");
}
}
} catch (Exception e) {
e.printStackTrace();
}
// log.info("---------------微信支付通知接口【end】---------------");
return resultMap;
}
四、支付宝回调
public Map<String, Object> alipayPayOrderBack(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// log.info("---------------------/app/mobi/alipay/callback------------------------" );
Map<String,Object> resultMap = new HashMap<String,Object>();
Map<String,String> params = AliPayUtil.getAliPayMap(request, response);
//商户订单号
String paymentNo = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//支付宝交易号
String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");
//交易状态
String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");
//实际支付金额
String factAmount = new String(request.getParameter("total_fee").getBytes("ISO-8859-1"),"UTF-8");
// log.info("---------------------------- paymentNo : "+ paymentNo );
// log.info("---------------------------- trade_no : "+ trade_no );
// log.info("---------------------------- trade_status : "+ trade_status );
// log.info("---------------------------- pushRetabeId : "+ pushRetabeId );
// log.info("---------------------------- retabeAmount : "+ retabeAmount );
// log.info("---------------------------- factAmount : "+ factAmount );
if(AlipayNotify.verify(params)){//验证成功
// log.info("-------------------------- success ------------------------");
if(trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")){
updateOrderPay(paymentNo);
}
response.getWriter().write("success");
resultMap.put("code", "200");
resultMap.put("msg", "支付成功");
}else{//验证失败
// log.info("-------------------------- error ------------------------");
response.getWriter().println("fail");
resultMap.put("code", "500");
resultMap.put("msg", "支付失败");
}
return resultMap;
}
一、1、https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103563&docType=1
在这个链接下载移动支付demo(里面有三部分--openssl、服务端demo---可以将相应的demo引入工程中,有包的话注意包的引入、客户端demo)
--AlipayConfig.java这个文件要兑换相应的自己应用的信息
eg:
public static String partner =“pid”---这个需要修改
public static String private_key=“商户私钥”--这个需要修改
public static String ali_public_key=“支付宝公钥”----这个一般不需要修改--在合作伙伴秘钥管理--查看支付宝公钥就可以看到
2、生成相应的公钥、秘钥,一般下载的demo中就有生成说明
3、登录支付宝账户--用显示让你去签约--点击立即签约-签约管理--(就会看到你账户的签约产品(已经有签约的话))
4、在你的商户下面有查看pid 、key 点击需要输入支付密码--输入支付密码、就可以查看pid 、合作伙伴秘钥管理(在它下面rsa加密--点击添加密钥---将你生成的公钥加进去)
这样就可以和前端联调了
二、前端主要用到
支付宝账户、pid、生成的秘钥
三、微信回调
public Map<String, Object> weiXinPayOrderBack(HttpServletRequest request,
HttpServletResponse response) throws Exception {
Map<String,Object> resultMap = new HashMap<String,Object>();
// log.info("---------------微信支付通知接口【start】---------------");
String responseXML = "";
// HttpServletRequest request = this.getRequest();
// HttpServletResponse response = this.getResponse();
response.setContentType("text/html;charset=utf-8");
String return_code = "";
String result_code = "";
// 用户openid
String openid = "";
// 商户订单号
String out_trade_no = "";
// 微信交易订单号
String transaction_id = "";
// 交易完成时间
String time_end = "";
// 商家附加参数数据,微信会原样返回
String attach = "";
try {
InputStream inStream = request.getInputStream();
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inStream.read(buffer)) != -1) {
outSteam.write(buffer, 0, len);
}
outSteam.close();
inStream.close();
String result = new String(outSteam.toByteArray(), "utf-8");// 获取微信调用我们notify_url的返回信息
// log.info("-----result-----" + result);
Map<Object, Object> map = XMLUtil.doXMLParse(result);
// log.info("-----map.size()-----" + map.size());
if (map != null) {
for (Object keyValue : map.keySet()) {
// log.info("-----keyValue-----" + keyValue + "="
// + map.get(keyValue));
switch (keyValue.toString()) {
case "return_code":
return_code = (String) map.get(keyValue);
break;
case "result_code":
result_code = (String) map.get(keyValue);
break;
case "openid":
openid = (String) map.get(keyValue);
break;
case "out_trade_no":
out_trade_no = (String) map.get(keyValue);
break;
case "transaction_id":
transaction_id = (String) map.get(keyValue);
break;
case "time_end":
time_end = (String) map.get(keyValue);
break;
case "attach":
attach = (String) map.get(keyValue);
break;
}
}
if ("SUCCESS".equals(return_code)
&& "SUCCESS".equals(result_code)) {
out_trade_no = out_trade_no.substring(0, 20); // 截取原始订单号
// log.info("-----out_trade_no(截取原始订单号)-----" + result);
// ------支付成功,修改订单状态等业务操作--------
updateOrderPay(out_trade_no);
// if (isUpdate) {
// log.info("--------------更新订单状态成功!--------------");
// } else {
// log.info("--------------更新订单状态失败!--------------");
// }
// log.info("--------------更新订单状态--------结束------");
// 向微信返回成功接收信息
responseXML = PayCommonUtil.setXML("SUCCESS", "");
resultMap.put("code", "200");
resultMap.put("msg", "支付成功");
// log.info("---------------微信支付通知接口【success】---------------");
} else {
// log.info("微信支付通知失败====无返回数据######");
responseXML = PayCommonUtil.setXML("FAIL", "");
resultMap.put("code", "500");
resultMap.put("msg", "支付失败");
}
}
} catch (Exception e) {
e.printStackTrace();
}
// log.info("---------------微信支付通知接口【end】---------------");
return resultMap;
}
四、支付宝回调
public Map<String, Object> alipayPayOrderBack(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// log.info("---------------------/app/mobi/alipay/callback------------------------" );
Map<String,Object> resultMap = new HashMap<String,Object>();
Map<String,String> params = AliPayUtil.getAliPayMap(request, response);
//商户订单号
String paymentNo = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//支付宝交易号
String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");
//交易状态
String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");
//实际支付金额
String factAmount = new String(request.getParameter("total_fee").getBytes("ISO-8859-1"),"UTF-8");
// log.info("---------------------------- paymentNo : "+ paymentNo );
// log.info("---------------------------- trade_no : "+ trade_no );
// log.info("---------------------------- trade_status : "+ trade_status );
// log.info("---------------------------- pushRetabeId : "+ pushRetabeId );
// log.info("---------------------------- retabeAmount : "+ retabeAmount );
// log.info("---------------------------- factAmount : "+ factAmount );
if(AlipayNotify.verify(params)){//验证成功
// log.info("-------------------------- success ------------------------");
if(trade_status.equals("TRADE_FINISHED") || trade_status.equals("TRADE_SUCCESS")){
updateOrderPay(paymentNo);
}
response.getWriter().write("success");
resultMap.put("code", "200");
resultMap.put("msg", "支付成功");
}else{//验证失败
// log.info("-------------------------- error ------------------------");
response.getWriter().println("fail");
resultMap.put("code", "500");
resultMap.put("msg", "支付失败");
}
return resultMap;
}
相关文章推荐
- 使用BlackBerry Transcoder API集成第三方加密方案(三)
- 集成第三方支付宝
- iOS:使用集成的支付宝SDK的支付流程
- 友盟第三方登陆,及分享,使用工具集成。
- android 支付宝集成 使用常见错误
- 使用BlackBerry Transcoder API集成第三方加密方案(一)
- 最新Android实现分享到QQ QZone 博客功能(集成官方SDK,不使用第三方)
- 【FastDev4Android框架开发】AndroidAnnnotations注入框架使用之第三方框架集成OrmLite(十五)
- 【FastDev4Android框架开发】AndroidAnnnotations注入框架使用之第三方框架集成Otto事件总线(十四)
- 支付宝即时到账接口的集成和使用
- Installshield集成第三方安装包并使用脚本安装
- 支付宝即时到账接口的集成和使用
- iOS平台软件开发工具(一)-新建的工程使用CocoaPods工具集成第三方框架
- 支付宝框架集成 使用步骤
- IOS 第三方支付的使用:支付宝
- 牛腩购物34:支付宝的集成和使用(web网站和web应用程序一眼判断的区别),支付宝即时到账
- android 支付宝集成 使用常见错误
- iOS集成第三方登录的使用
- 安装Cocoapods(MAC 10.11.1 安装不成功修正完毕)使用命令写文件夹以及写入需要的第三方类库信息并集成到项目中
- IOS 第三方支付的使用:支付宝