1、面对面支付分为:条码支付、正向扫码(商户静态二维码)、正向扫码(商户动态二维码)
2、文件名:AlipayNotify.jsp(信息回调接收页面)、InStorePay.html/jsp(条码支付)、MerchantQR.html/jsp(静态二维码)、TransactionQR.html/jsp(动态二维码)、query.html/jsp(查询交易信息)、refund.html/jsp(交易退款)、cancel.java(撤销交易)、CheckQuery.java(ajax 查询交易)、Method.java(生成请求数据,生成请求连接、请求支付宝服务器、查询逻辑、撤销逻辑)、web.xml(配置ajax 关联到CheckQuery.java)
3、境外的支付宝支付,数据签名是用MD5签名的,支付宝不提供相关jar包
4、境外支付宝使用MD5的密钥,这个跟境内的不一样,还有就是旧版接口和新版接口用的密钥是不同的两条(境内同理)
5、网关地址:测试环境为:https://openapi.alipaydev.com/gateway.do?
正式环境为:https://intlmapi.alipay.com/gateway.do? (具体以官网集成文档为准)
境外的代码比较容易,具体如下:
try{
System.out.println("");
System.out.println("********InStorepay start********");
out.println("<a href =\"index.html\"></a>");
int cancelcounter = 0;
SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss");
String orderId = date.format(new Date());
String key = properties.key;
String buyer_identity_code = request.getParameter("buyer_identity_code");
String biz_product = properties.biz_product;
String partner = properties.PID;
String alipay_seller_id = partner;
String trans_amount = request.getParameter("trans_amount");
String _input_charset = properties.input_charset;
String service = properties.f2f_service;
String partner_trans_id = orderId;
String currency = request.getParameter("currency");
String identity_code_type = properties.identity_code_type;
String trans_create_time = orderId;
String sign_type = properties.sign_type;
String trans_name = request.getParameter("trans_name");
String secondary_merchant_name = properties.secondary_merchant_name;//the name u decide
String secondary_merchant_id = properties.secondary_merchant_id;//the id u decide
String secondary_merchant_industry = properties.secondary_merchant_industry;//check-> MCC code Alipay merchant onboarding form 20161021.xlsx
String extend_info = "{'secondary_merchant_name':'"+secondary_merchant_name+"','secondary_merchant_id':'"+secondary_merchant_id+"','secondary_merchant_industry':'"+secondary_merchant_industry+"'}";
String sign = "";
Map<String, String> para = new HashMap<String, String>();
para.put("alipay_seller_id", alipay_seller_id);
para.put("biz_product", biz_product);
para.put("buyer_identity_code", buyer_identity_code);
para.put("currency", currency);
para.put("extend_info", extend_info);
para.put("identity_code_type", identity_code_type);
para.put("partner", partner);
para.put("partner_trans_id", partner_trans_id);
para.put("service", service);
para.put("sign_type", sign_type);
para.put("trans_amount", trans_amount);
para.put("trans_create_time", trans_create_time);
para.put("trans_name", trans_name);
para.put("_input_charset", _input_charset);
String sUrlText = Method.buildRequest(para,"get","确认");
//System.out.println(sUrlText);
String res = Method.requestAlipay(sUrlText);
//System.out.println(res);
Map data = Method.doXMLParse(res);
System.out.println("*****data:"+data);
String isSuccess = data.get("is_success").toString();
String old_sign = data.get("sign").toString();
Map data_rp = Method.doXMLParse("<xml>"+data.get("response").toString()+"</xml>");
Map alipay = Method.doXMLParse("<xml>"+data_rp.get("alipay").toString()+"</xml>");
JSONObject json = new JSONObject(alipay);
//System.out.println("alipay:"+alipay);
String request_rs = data.get("request").toString();
System.out.println(request_rs);
可以看出,容易出错的是extend_info,里面的字符串需要以
{'key':'value','key2':'value2'} 形式来传递到下一步,key和value都需要用单引号包着,这里是跟境内不一样的然后看生成请求参数,使用Method.buildRequest方法,把请求的数据组合成一条链接就好了,如:https://intlmapi.alipay.com/gateway.do?key=value&key=value&key=value,然后用URLConnection发出去就可以等反馈数据了,退款、撤销等操作的逻辑一样,注意参数就好了,还有注意对返回结果验证签名是,要把值为空的键值对去掉
支付宝demo链接:http://download.youkuaiyun.com/download/qq_22778717/10231371