1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > java 银联 支付宝接口

java 银联 支付宝接口

时间:2022-04-11 10:04:52

相关推荐

java 银联 支付宝接口

很多做电商的都需要和金额打交道,银联,支付宝等支付方式是必不可少的。

其实做这些东西都不难,难的主要是没有文档,demo。你只需要按照文档的要求来就行了,一切都ok。

这些东西拿到并不难,主要是你的商户需要去申请。申请了有商户号,密钥等这些必要的参数。不然你只能把代码写好,等银联,支付宝批下来了,你才可以调试

银联:

类型:unionpay

请求的参数

Map<String, String> sParaTemp = new HashMap<String, String>();

// 这些是固定的信息

sParaTemp.put("version", "1.0.0"); // 协议版本

sParaTemp.put("charset", "UTF-8"); // 字符编码

sParaTemp.put("transType", "01"); // 交易类型 01代表的是支付交易

sParaTemp.put("merAbbr", ); // 商户名称

sParaTemp.put("merId", ); // 商户代码

sParaTemp.put("merCode", ""); // 商户类型

sParaTemp.put("backEndUrl",); // 通知URL就是商户接收银联返回来的地址

sParaTemp.put("frontEndUrl",); // 当用户完成支付时候,跳转的URL地址

sParaTemp.put("acqCode", ""); // 收单机构

// 订单信息

sParaTemp.put("orderTime",); // 订单时间

sParaTemp.put("orderNumber", ); // 订单号

sParaTemp.put("commodityName", );// 订单名称

sParaTemp.put("commodityUrl", "");

sParaTemp.put("commodityUnitPrice", ""); // 商品单价

sParaTemp.put("commodityQuantity", ""); // 商品数量

sParaTemp.put("transferFee", ""); // 运输费用

sParaTemp.put("commodityDiscount", ""); // 优惠信息

sParaTemp.put("orderAmount", total_fee + ""); // 交易金额

sParaTemp.put("orderCurrency", "156"); // 币种:人民币

sParaTemp.put("customerName", );// 持卡人姓名,因为是邮箱注册,可能有非法字符,所以取会员ID

sParaTemp.put("defaultPayType", ""); // 默认支付方式

sParaTemp.put("defaultBankNumber", ""); // 默认银行代码

sParaTemp.put("transTimeout", ""); // 交易超时时间

sParaTemp.put("customerIp",); // 持卡人IP

sParaTemp.put("origQid", ""); // 原交易流水号

sParaTemp.put("merReserved", merReserved); // 商户保留域

return UnionpayUtils.createPayHtml(sParaTemp, key); 这个方法是把你的参数进行排序,然后再拼一个form让它自动发送

public static String createPayHtml(Map<String, String> map, String key) {

Map<String, String> treeMap = new TreeMap<String, String>();

treeMap.putAll(map);

treeMap.put("signature", md5(joinMapValue(treeMap, '&') + md5(key)));

treeMap.put("signMethod", signType);

return generateAutoSubmitForm(payment, treeMap);

}

public static String joinMapValue(Map<String, String> map, char connector) {

StringBuffer b = new StringBuffer();

for (Map.Entry<String, String> entry : map.entrySet()) {

b.append(entry.getKey());

b.append('=');

if (entry.getValue() != null) {

b.append(entry.getValue());

}

b.append(connector);

}

System.out.println("params:"+b.toString());

return b.toString();

}

private static String generateAutoSubmitForm(String actionUrl,

Map<String, String> paramMap) {

StringBuilder html = new StringBuilder();

html.append("<form id=\"pay_form\" name=\"pay_form\" action=\"");

html.append(actionUrl).append("\" method=\"post\">\n");

for (String key : paramMap.keySet()) {

html.append("<input type=\"hidden\" name=\"" + key + "\" id=\""

+ key + "\" value=\"" + paramMap.get(key) + "\">\n");

}

html.append("</form>");

html.append("<script language='JavaScript' type='text/JavaScript'>");

html.append("document.pay_form.submit()");

html.append("</script>");

return html.toString();

}

返回处理

public String onReturn() {

HttpServletRequest request = ThreadContextHolder.getHttpRequest();

//获取银联过来反馈信息

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] + ",";

}

params.put(name, valueStr);

}

String returnMsg = "";

//进行参数验证

if(checkSign(params)){

处理自己的业务逻辑

}

return returnMsg;

}

/**

* 支付返回的处理 验证签名

*/

public boolean checkSign(Map<String, String> map) {

Map<String,String> treeMap = new TreeMap<String,String>();

treeMap.putAll(map);

if (treeMap.get("signature") == null)

return false;

if (signType.equalsIgnoreCase(treeMap.get("signMethod"))) {

return treeMap.get("signature")

.equals(md5(joinMapValue(treeMap, '&') + md5(securityKey)));

} else {

return verifyWithRSA(

treeMap.get("signMethod"),md5(joinMapValue(treeMap, '&') + md5(securityKey)),

treeMap.get("signature"));

}

}

基本完事,不晓得还有木有没有复制出来的(这些都是从我自己开发的项目中拿出来的)

支付宝:

类型:支付宝即时到账

//把请求参数打包成数组

Map<String, String> sParaTemp = new HashMap<String, String>();

sParaTemp.put("payment_type", "1");

sParaTemp.put("out_trade_no",);//订单号

sParaTemp.put("subject", );//订单名称

sParaTemp.put("body", );//订单描述

sParaTemp.put("total_fee",);//交易金额

sParaTemp.put("show_url", );//商品的地址

sParaTemp.put("paymethod", );//默认支付方式,取值见“即时到帐接口”技术文档中的请求参数列表

sParaTemp.put("defaultbank", );//默认网银代号

sParaTemp.put("anti_phishing_key", );//防钓鱼时间戳

sParaTemp.put("exter_invoke_ip",);//获取客户端的IP地址

sParaTemp.put("extra_common_param", );//自定义参数,可存放任何内容(除=、&等特殊字符外),不会显示在页面上

sParaTemp.put("buyer_email", );//默认买家支付宝账号

sParaTemp.put("royalty_type", );//提成类型,该值为固定值:10,不需要修改

sParaTemp.put("royalty_parameters", );//提成信息集

//增加基本配置 partner,seller_email 都是申请的时候需要的信息

sParaTemp.put("service", "create_direct_pay_by_user");

sParaTemp.put("partner", );

sParaTemp.put("return_url", );//返回地址

sParaTemp.put("notify_url", );//后台通知地址

sParaTemp.put("seller_email", );//

sParaTemp.put("_input_charset", );//这里支付宝有两种编码格式GBK,UTF-8

return AlipaySubmit.buildForm(sParaTemp, AlipayService.ALIPAY_GATEWAY_NEW, "get",key);

这个AlipaySubmit.buildForm()是支付宝的包里面的方法,直接调用就行了

返回

Map<String,String> cfgparams = paymentManager.getConfigParams(this.getId());

HttpServletRequest request = ThreadContextHolder.getHttpRequest();

String key =cfgparams.get("key");

String partner =cfgparams.get("partner");

String encoding= cfgparams.get("return_encoding");

//获取支付宝GET过来反馈信息

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] + ",";

}

//根据自己的需求看看是否需要转码,如果你的tomcat 编码格式设置了UTF-8,基本不需要转码

// if(!StringUtil.isEmpty(encoding)){

// valueStr = StringUtil.to(valueStr, encoding);

// }

params.put(name, valueStr);

}

//计算得出通知验证结果

boolean verify_result = AlipayNotify.returnverify(params,key,partner);

if(("TRADE_FINISHED".equals(trade_status) || "TRADE_SUCCESS".equals(trade_status))){//验证成功

//写你自己的业务逻辑,修改订单的状态什么的

}

=====================================支付宝方式2=======================================

2、从本站提交到支付宝:

/**

* 将订单提交支付宝进行网上支付

*/

public ActionForward submitAlipayUrl(ActionMapping mapping,

ActionForm form, HttpServletRequest request,

HttpServletResponse response) throws Exception {

String orderNo = request.getParameter("orderNo");//订单编号

HashMap hm = new HashMap();

hm.put("_input_charset", "utf-8");// 采用相同的编码方式

hm.put("body", "企鹅个性化图书订单,订单号:" + orderNo);// 填写在跳到支付宝页面上显示的付款内容信息

hm.put("notify_url", "http://127.0.0.1:8888/mypenguin/orders.do?method=AlipayNotify");// 客户付款后,支付宝调用的页面

hm.put("out_trade_no", orderNo);// 外部交易号,最好具有唯一性,在获取支付宝发来的付款信息时使用.

hm.put("partner", "2088002302055380");// partnerId(合作伙伴ID)

//hm.put("agent", "2088002302055380");// partnerId(合作伙伴ID)

hm.put("payment_type", "1");// 支付类型 1=商品购买,2=服务购买,...

//hm.put("price", "178.00");// 订单金额信息

hm.put("total_fee", "178.00");// 订单金额和信息

//hm.put("quantity", "1");// 订单商品数量,一般都是写1,它是按照整个订单包来计算

hm.put("return_url", "http://127.0.0.1:8888/mypenguin/orders.do?method=AlipayReturn");// 客户付款成功后,显示给客户的页面

hm.put("show_url", "http://127.0.0.1:8888/mypenguin/books.do?method=list&kindId=1");//展示地址,即在支付页面时,商品名称旁边的“详情”的链接地址。

hm.put("seller_email", "monicali_7766@");// 你的支付宝账户email

hm.put("service", "create_direct_pay_by_user");// create_direct_pay_by_user=直接付款,trade_create_by_buyer=担保付款

hm.put("subject", "企鹅个性化图书订单号:" + orderNo);// 填写在跳到支付宝页面上显示的付款标题信息

String payGateway = "/cooperate/gateway.do";// 跳转到支付宝的url头

String securityCode="7nj9sczcnfc4n8366j46mrzsbqjksmzn";//securityCode(安全码);

String sign = makeUrl(hm,securityCode,"utf-8",payGateway);//securityCode(安全码);

hm.put("sign", sign);

hm.put("sign_type", "MD5");

PrintWriter out = response.getWriter();

out.println("<form name='alipaysubmit' method='post' action='/cooperate/gateway.do?_input_charset=utf-8' >");

out.println("<input type='hidden' name='service' value='" + hm.get("service") + "'>");

out.println("<input type='hidden' name='partner' value='" + hm.get("partner") + "'>");

out.println("<input type='hidden' name='seller_email' value='" + hm.get("seller_email") + "'>");

out.println("<input type='hidden' name='out_trade_no' value='" + hm.get("out_trade_no") + "'>");

out.println("<input type='hidden' name='subject' value='" + hm.get("subject") + "'>");

out.println("<input type='hidden' name='body' value='" + hm.get("body") + "'>");

out.println("<input type='hidden' name='total_fee' value='" + hm.get("total_fee") + "'>");

out.println("<input type='hidden' name='show_url' value='" + hm.get("show_url") + "'>");

out.println("<input type='hidden' name='return_url' value='" + hm.get("return_url") + "'>");

out.println("<input type='hidden' name='notify_url' value='" + hm.get("notify_url") + "'>");

out.println("<input type='hidden' name='payment_type' value='1'>");

out.println("<input type='hidden' name='sign' value='" + hm.get("sign") + "'>");

out.println("<input type='hidden' name='sign_type' value='" + hm.get("sign_type") + "'>");

out.println("</form>");

out.println("<script>");

out.println(" document.alipaysubmit.submit()");

out.println("</script>");

return null;

}

/**

* 根据传入的参数生成Alipay的支付URL

* @param hm 参数值

* @param securityCode 安全码

* @param charset 编码

* @param payGateway 支付宝gateway

* @return

*/

public static String makeUrl(HashMap hm,String securityCode,String charSet,String payGateway) throws Exception{

List keys = new ArrayList(hm.keySet());

Collections.sort(keys);//支付宝要求参数必须按字母排序

StringBuffer content = new StringBuffer();

for (int i = 0; i < keys.size(); i++) {

content.append((String) keys.get(i));

content.append("=");

content.append((String) hm.get((String) keys.get(i)));

if (i != keys.size() - 1) {

content.append("&");

}

}

content.append(securityCode);

String sign = DataUtil.MD5Encode(content.toString(), charSet); //MD5加密

return sign;

}

2、return_url的内容:

/**

* 支付宝支付完成以后,当前窗口会从支付宝的页面跳转回这个页面。该页面称作“返回页”,

* 是同步被支付宝服务器所调用,可当作是支付完成后的提示信息页,如“您的某某某订单,多少金额已支付成功”。

*/

public ActionForward AlipayReturn(ActionMapping mapping,

ActionForm form, HttpServletRequest request,

HttpServletResponse response) throws Exception {

String alipayNotifyURL = "/cooperate/gateway.do?service=notify_verify";

//String alipayNotifyURL = "/trade/notify_query.do?";//此路径是在上面链接地址无法起作用时替换使用。

alipayNotifyURL = alipayNotifyURL+ "&partner=2088002302055380&notify_id="+ request.getParameter("notify_id");

// 获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的

String responseTxt = check(alipayNotifyURL);

// 获得POST 过来参数设置到新的requestParams中

Map requestParams = request.getParameterMap();

List keys = new ArrayList(requestParams.keySet());

Collections.sort(keys);

StringBuffer content = new StringBuffer();

for (int i = 0; i < keys.size(); i++) {

String key=(String) keys.get(i);

if(!key.equals("")&&!key.equals("sign")&&!key.equals("sign_type")){

content.append((String) keys.get(i));

content.append("=");

content.append((String)requestParams.get((String) keys.get(i)));

if (i != keys.size() - 1) {

content.append("&");

}

}

}

String securityCode="7nj9sczcnfc4n8366j46mrzsbqjksmzn";//securityCode(安全码);

content.append(securityCode);

String mysign = DataUtil.MD5Encode(content.toString(), "utf-8");

System.out.println("--------------------------content="+content);

System.out.println("--------------------------mysign="+mysign);

System.out.println("--------------------------sign="+request.getParameter("sign"));

if (mysign.equals(request.getParameter("sign")) && responseTxt.equals("true") ){

if (request.getParameter("trade_status").equalsIgnoreCase("TRADE_FINISHED")){

// 可以做重定向,也可以用来虚拟物品发货

}

return mapping.findForward("payOK");//交易成功

}else{

return mapping.findForward("payFail");//交易失败

}

}

3、notify_url的内容:

/**

* 通知返回URL,仅适用于异步返回处理结果的接口。有些服务是无法立即返回处理结果的,那么需要通过这个URL将处理结果异步返回给合作伙伴

*/

public ActionForward AlipayNotify(ActionMapping mapping,

ActionForm form, HttpServletRequest request,

HttpServletResponse response) throws Exception {

String alipayNotifyURL = "/cooperate/gateway.do?service=notify_verify";

//String alipayNotifyURL = "/trade/notify_query.do?";//此路径是在上面链接地址无法起作用时替换使用。

alipayNotifyURL = alipayNotifyURL+ "&partner=2088002302055380&notify_id="+ request.getParameter("notify_id");

// 获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的

String responseTxt = check(alipayNotifyURL);

// 获得POST 过来参数设置到新的requestParams中

Map requestParams = request.getParameterMap();

List keys = new ArrayList(requestParams.keySet());

Collections.sort(keys);

StringBuffer content = new StringBuffer();

for (int i = 0; i < keys.size(); i++) {

String key=(String) keys.get(i);

if(!key.equals("")&&!key.equals("sign")&&!key.equals("sign_type")){

content.append((String) keys.get(i));

content.append("=");

content.append((String)requestParams.get((String) keys.get(i)));

if (i != keys.size() - 1) {

content.append("&");

}

}

}

String securityCode="7nj9sczcnfc4n8366j46mrzsbqjksmzn";//securityCode(安全码);

content.append(securityCode);

String mysign = DataUtil.MD5Encode(content.toString(), "utf-8");

System.out.println("--------------------------content="+content);

System.out.println("--------------------------mysign="+mysign);

System.out.println("--------------------------sign="+request.getParameter("sign"));

if (mysign.equals(request.getParameter("sign")) && responseTxt.equals("true") ){

if (request.getParameter("trade_status").equalsIgnoreCase("TRADE_FINISHED")){

// 可以做重定向,也可以用来虚拟物品发货

}

return mapping.findForward("payOK");

}else{

return mapping.findForward("payFail");

}

}

/**

* @param myUrl

*

* @param url

*

* @return 获取url内容

*/

public static String check(String urlvalue ) {

String inputLine = "";

try

{

URL url = new URL(urlvalue);

HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();

BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));

String stTemp = "";

while((stTemp = in.readLine()) != null)

{

System.out.println(stTemp);

inputLine = inputLine + stTemp;

}

}

catch(Exception e)

{

e.printStackTrace();

}

return inputLine;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。