03_分析易宝支付网关的请求协议
创梦综合技术qq交流群:CreDream:251572072
--------------------------------------
1.buildHmac()方法用于生产md5-hmac
public static buildHmac(String po_cmd,String p1_Merld, 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_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);//商品描述
sValue.append(p8_Url);//商户接收支付成功数据的地址,也就是
//支付成功后返回给商户数据的地址,因为这里使用引导浏览器的方式把
//数据给了商户的某个地址来接收,这种方式不是很好.一旦用户的浏览器出问题了
//或者人为的暂停了浏览器.那么商户就没法收到易宝返回的数据.
sValue.append(p9_SAF);//送货地址,用不到不可以传null,要传""空字符串.
sValue.append(pa_MP);//商户扩展信息,这个用来商户发给易宝什么数据
// 当支付完成后,就原样返回这些信息.如果有些数据需要发给易宝,这些
// 数据在支付完后,会按照原样返回这些信息,这里主要做为扩展的信息.
sValue.append(pd_Frpid);//银行编码
sValue.append(pr_NeedResponse);//应答机制
// 应答机制
// 通过这句就可以把,要发送的信息,通过给定的密钥加密后发给易宝支付了.
String sNewString = DigesUtil.hmacSign(sValue.toString(),keyVlue);
return sNewString;
}
---------------------------------------------------
2. a.sValue.append(p1_Merld);//商户编号这是在易宝支付的时候
易宝支付给商户的一个商户编号;
当商户在易宝开通服务的时候,易宝会给商户,一个商户编号,和一个密钥.
b.sValue.append(p5_Pid);//商品名称
sValue.append(p6_Pcat);//商品种类
sValue.append(p7_Pdesc);//商品描述
这部分是可选的.
c.银行编码:由易宝支付规定的.使用的时候要注意易宝支付的规范.
d.应答机制:易宝支付通过两种并行的方式返回支付结果,这里应答机制有两种
0和1,应答机制,避免了使用浏览器来接收易宝返回给商户的数据
从而降低了因浏览器的原因造成商户接收不到支付结果数据而带来的风险.
e.易宝的应答机制,主要是通过易宝的后台程序首先和商户服务器建立socket,
然后再给商户提供的用来接收支付结果
数据的网址发送一个请求,如果返回的状态码为200,那么易宝就认为他已经
把支付结果数据完整的交付给了商户.
f.这里0代表:如果访问商户的地址,返回的200,就认为返回的已经成功了交付了就
不再给商户了发了.
1代表:不以200状态为判断依据,依据是商户的页面返回一个success字符串.
如果商户返回了一个html页面,页面中只有success这个代码,
那么就代表把支付信息成功的通知给了商户,否则会不停的给商户发送支付状态
信息,直到易宝接收到商户返回的success这个信息为止.
g.一般设置为0,就可以了,但是有一种情况就是:当你的程序出现了例外异常,
你在程序中进行了异常的捕获,那么这时候返回的状态码也是200,但是商户
的程序并没有接收到支付结果信息.这个时候就应该,通过页面返回success字符串来
表示支付成功与否.
---------------------------------------------------
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码就不对了.
----------------------------------------------------