目录
爱贝支付是之前公司用的,一款集微信,支付宝,银联的第三方支付工具。做个笔记复习一下
1.爱贝支付流程
2.接口说明
接口均采用http协议,POST方法。
数据传输的时候参数值需要进行urlencode,urlencode规则使用application/x-www-form-urlencoded方式,即空格” ”会被编码成加号”+”。进行urlencode编码时,中文字符采用UTF-8编码。
请求和应答参数均为transdata、sign、signtype。transdata为具体业务参数,数据格式为json格式;sign为transdata的签名数据;signtype为签名算法类型,目前只支持RSA算法。具体呈现方式为transdata=xxxx&sign=yyyy&signtype=RSA,其中yyyy就是对xxxx的签名数据,yyyy=rsa(md5(xxxx))。采用RSA MD5数字签名算法,私钥签名、公钥验签。和Java里面的MD5WithRSA算法一致。
商户需要以应用私钥对请求数据进行签名、使用平台公钥对应答数据进行验签。错误应答无须验签。
2.1.下单-获取transid
请求URL:https://cp.iapppay.com/payapi/order
请求格式示例:https://cp.iapppay.com/payapi/order?transdata=urlencode(xxx)&sign=urlencode(yyy)&signtype=RSA
2.2返回参数及格式
成功应答数据样例(urlencode前内容):transdata={"transid":"11111"}&sign=xxxxxx&signtype=RSA
成功应答参数说明:
失败应答数据样例(urlencode前内容):transdata={"code":"1001","errmsg":"签名验证失败"}
失败应答参数列表:
3.代码实现
3.1项目结构
3.2OrderMain
package Test;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import util.HttpUtils;
import util.IpayConfig;
import util.RSA;
import net.sf.json.JSONObject;
public class OrderMain {
/**
* 1.封装下单请求数据
* @param appid
* @param waresid 商品编号
* @param waresname 商品名称
* @param cporderid 商户订单号
* @param price 支付金额-可选
* @param appuserid 唯一标识-1#23
* @param cpprivateinfo 商户私有信息-可选
* @param notifyurl 支付结果通知地址-可选
* @return
*/
public static String ReqData(String appid, int waresid,String waresname,String cporderid ,float price,String appuserid,String cpprivateinfo,String notifyurl) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("appid", appid);
//商品编号
jsonObject.put("waresid", waresid);
//商户订单号
jsonObject.put("cporderid", cporderid);
//货币类型-RMB
jsonObject.put("currency", "RMB");
//唯一标识-1#23
jsonObject.put("appuserid", appuserid);
//商品名称-可选
if(!waresname.isEmpty()){
jsonObject.put("waresname", waresname);
}
//支付金额-可选
jsonObject.put("price", price);
//商户私有信息-可选
if(!cpprivateinfo.isEmpty()){
jsonObject.put("cpprivateinfo", cpprivateinfo);
}
//支付结果通知地址-可选
if(!notifyurl.isEmpty()){
jsonObject.put("notifyurl", notifyurl);
}
//1.请求参数
String transdata = jsonObject.toString();// 组装成 json格式数据
//2.sign签名数据
String sign = RSA.sign(transdata, IpayConfig.PRIVATE_KEY, "utf-8");
//3.url
//String url = "https://cp.iapppay.com/payapi/order?";
//post数据
String data = "transdata=" + transdata + "&sign=" + sign+ "&signtype=RSA";// 组装请求参数 //System.out.println("下单数据:"+data);
System.out.println("1.post数据:"+data);
return data;
}
/**
* 2.请求过程,返回流水单号
* @param reqData
* @return
*/
public static String GetTransid(String reqData){
// System.out.println(reqData);
String url = "https://cp.iapppay.com/payapi/order";
//调用Http的post方法,发送请求数据
String respData = HttpUtils.sentPost(url, reqData);
System.out.println("2.响应数据:"+respData);
//参数操作
String[] dataArray = respData.split("&");
Map<String, String> reslutMap = new HashMap<String, String>();
for (String s : dataArray) {
if (s.startsWith("transdata")) {
reslutMap.put("transdata", s.substring(s.indexOf("=") + 1, s.length()));
} else if (s.startsWith("signtype")) {
reslutMap.put("signtype", s.substring(s.indexOf("=") + 1, s.length()));
} el