03_分析易宝支付网关的请求协议
1、buildHmac()方法用于生成md5-hmac
public static String buildHmac(String p0_Cmd,String p1_Merid,String p2_Order,String p3_Amt,
String p4_Cur,String p5_Pid,String p6_Pcat,String p7_Pdesc,String p8_Url,String p9_SAF,String pa_MP,
String pd_Frpid,String pr_NeedResponse,String keyValue){
StringBuffer sValue=new StringBuffer();
sValue.append(p0_Cmd);//业务类型,buy
sValue.append(p1_Merid);//商户编号
sValue.append(p2_Order);//商户订单号
sValue.append(p3_Amt);//支付金额
sValue.append(p4_Cur);//交易币种
sValue.append(p5_Pid);//商品名称
sValue.append(p6_Pcat);//商品种类
sValue.append(p7_Pdesc);//商品描述
sValue.append(p8_Url);//商户接收支付成功数据的地址,也就是支付成功后返回给商户数据的地址,因为这里使用引导浏览器的方式把数据给了商户的某个地址来接收,这种方式不是很好.一旦用户的浏览器出问题了,或者人为的暂停了浏览器.那么商户就没法收到易宝返回的数据。
sValue.append(p9_SAF);//送货地址,用不到不可以传null,要传""空字符串
sValue.append(pa_MP);//商户扩展信息,商户扩展信息,这个用来商户发给易宝什么数据
当支付完成后,就原样返回这些信息.如果有些数据需要发给易宝,这些
数据在支付完后,会按照原样返回这些信息,这里主要做为扩展的信息.
sValue.append(pd_Frpid);//银行编码
sValue.append(pr_NeedResponse);//应答机制0,1
String sNewString =DigestUtil.hmacSign(sValue.toString,keyValue);//通过这句就可以把,要发送的信息,通过给定的密钥加密后发给易宝支付了.
return sNewString;
}
2、a)sValue.append(p1_Merld)//当商户在易宝开通服务的时候,易宝会给商户,一个商户编号,和一个密钥.
b) sValue.append(p5_Pid);//商品名称
sValue.append(p6_Pcat);//商品种类
sValue.append(p7_Pdesc);//商品描述
这部分是可选的.
c)银行编码:由易宝支付规定的.使用的时候要注意易宝支付的规范
e)易宝的应答机制,主要是通过易宝的后台程序首先和商户服务器建立socket, 然后再给商户提供的用来接收支付结果
数据的网址发送一个请求,如果返回的状态码为200,那么易宝就认为他已经把支付结果数据完整的交付给了商户。
f) 0 代表: 如果访问商户的地址,返回的200,就认为返回的已经成功了。
1 代表: 不以200状态为判断依据,依据是商户的页面返回一个success字符串。如果商户返回了一个html页面,
页面中只有succes 这个代码,那么就代 表 把支付信息成功的通知给了商户,否则会不停的给商户发送支付状态信息,
直到易宝接收到商户返回的success这个信息为止。
g)一般设置为0,就可以了。
3、易宝支付,对顺序的要求很严,也就是.
sValue.append(p0_Cmd);//业务类型,buy
sValue.append(p1_Merld);//商户编号
sValue.append(p2_Order);//商户订单号
sValue.append(p3_Amt);//支付金额
sValue.append(p4_Cur);//交易币种
sValue.append(p5_Pid);//商品名称
sValue.append(p6_Pcat);//商品种类
sValue.append(p7_Pdesc);//商品描述
这部分的顺序必须要按照上面写的顺序来,否则生成的md5码就不对了.