昨天花了好久的时间学习了支付接口的教,我看了前7集,就够用了,大家上网搜索一下传智播客在线支付还不错。
1.一开始有一个form表单
2.这个表单是他帮你写好的,有很多银行,银行的name都是特定的
3.这个表单要提交,教程中使用的是servlet,我使用的是struts2,原理其实也差不多,就是跳转之后要处理事务,servlet处理的功能跟struts中的dao+action是差不多的
4.提交之后,要定义一些属性,有一些属性如果你的表单是有上传上来的,那就使用一些手段去获取,如果没有赋值的你就要自己给他赋值。
5.他有一个加密类,你在给一个属性赋值的时候是要用到的。这个属性叫做md5hmac、
6.之后这些属性都传到另外一个表单,这个表单是要跳转到支付接口的,这个表单是不用给用户看到的(我用的方法就是用js语言设置这个表单自动提交)
7.最后就会跳转到这个支付页面的
备注:
1.这个需要有两个属性,如截图的前两个,是需要这个企业提供给你,我截图的这个过期了,我用时候跳转到页面,但是用不了
2.加密类
1 /**
2 * @param aValue
3 * @return
4 */
5 public static String digest(String aValue) {
6 aValue = aValue.trim();
7 byte value[];
8 try {
9 value = aValue.getBytes(encodingCharset);
10 } catch (UnsupportedEncodingException e) {
11 value = aValue.getBytes();
12 }
13 MessageDigest md = null;
14 try {
15 md = MessageDigest.getInstance("SHA");
16 } catch (NoSuchAlgorithmException e) {
17 e.printStackTrace();
18 return null;
19 }
20 return toHex(md.digest(value));
21
22 }
23
24 // public static void main(String[] args) {
25 // System.out.println(hmacSign("AnnulCard1000043252120080620160450.0http://localhost/SZXpro/callback.asp这
26
27 4564868265473632445648682654736324511","8UPp0KE8sq73zVP370vko7C39403rtK1YwX40Td6irH216036H27Eb12792t"));
28 // }
29 }
30 ----------------------
31 b./payment/src/com/credream/utils/PanymentUtil.java
32 package com.credream.utils;
33
34 public class PanymentUtil {
35 /**
36 * 生成hmac方法
37 *
38 * @param p0_Cmd 业务类型
39 * @param p1_MerId 商户编号
40 * @param p2_Order 商户订单号
41 * @param p3_Amt 支付金额
42 * @param p4_Cur 交易币种
43 * @param p5_Pid 商品名称
44 * @param p6_Pcat 商品种类
45 * @param p7_Pdesc 商品描述
46 * @param p8_Url 商户接收支付成功数据的地址
47 * @param p9_SAF 送货地址
48 * @param pa_MP 商户扩展信息
49 * @param pd_FrpId 银行编码
50 * @param pr_NeedResponse 应答机制
51 * @param keyValue 商户密钥
52 * @return
53 */
54 public static String buildHmac(String p0_Cmd,String p1_MerId,
55 String p2_Order, String p3_Amt, String p4_Cur,String p5_Pid, String p6_Pcat,
56 String p7_Pdesc,String p8_Url, String p9_SAF,String pa_MP,String pd_FrpId,
57 String pr_NeedResponse,String keyValue) {
58 StringBuffer sValue = new StringBuffer();
59 // 业务类型
60 sValue.append(p0_Cmd);
61 // 商户编号
62 sValue.append(p1_MerId);
63 // 商户订单号
64 sValue.append(p2_Order);
65 // 支付金额
66 sValue.append(p3_Amt);
67 // 交易币种
68 sValue.append(p4_Cur);
69 // 商品名称
70 sValue.append(p5_Pid);
71 // 商品种类
72 sValue.append(p6_Pcat);
73 // 商品描述
74 sValue.append(p7_Pdesc);
75 // 商户接收支付成功数据的地址
76 sValue.append(p8_Url);
77 // 送货地址
78 sValue.append(p9_SAF);
79 // 商户扩展信息
80 sValue.append(pa_MP);
81 // 银行编码
82 sValue.append(pd_FrpId);
83 // 应答机制
84 sValue.append(pr_NeedResponse);
85
86 String sNewString = DigestUtil.hmacSign(sValue.toString(), keyValue);
87 return sNewString;
88 }
89
90 /**
91 * 返回校验hmac方法
92 *
93 * @param hmac 支付网关发来的加密验证码
94 * @param p1_MerId 商户编号
95 * @param r0_Cmd 业务类型
96 * @param r1_Code 支付结果
97 * @param r2_TrxId 易宝支付交易流水号
98 * @param r3_Amt 支付金额
99 * @param r4_Cur 交易币种
100 * @param r5_Pid 商品名称
101 * @param r6_Order 商户订单号
102 * @param r7_Uid 易宝支付会员ID
103 * @param r8_MP 商户扩展信息
104 * @param r9_BType 交易结果返回类型
105 * @param keyValue 密钥
106 * @return
107 */
108 public static boolean verifyCallback(String hmac, String p1_MerId,
109 String r0_Cmd, String r1_Code, String r2_TrxId, String r3_Amt,
110 String r4_Cur, String r5_Pid, String r6_Order, String r7_Uid,
111 String r8_MP, String r9_BType, String keyValue) {
112 StringBuffer sValue = new StringBuffer();
113 // 商户编号
114 sValue.append(p1_MerId);
115 // 业务类型
116 sValue.append(r0_Cmd);
117 // 支付结果
118 sValue.append(r1_Code);
119 // 易宝支付交易流水号
120 sValue.append(r2_TrxId);
121 // 支付金额
122 sValue.append(r3_Amt);
123 // 交易币种
124 sValue.append(r4_Cur);
125 // 商品名称
126 sValue.append(r5_Pid);
127 // 商户订单号
128 sValue.append(r6_Order);
129 // 易宝支付会员ID
130 sValue.append(r7_Uid);
131 // 商户扩展信息
132 sValue.append(r8_MP);
133 // 交易结果返回类型
134 sValue.append(r9_BType);
135 String sNewString = DigestUtil.hmacSign(sValue.toString(), keyValue);
136
137 if (hmac.equals(sNewString)) {
138 return true;
139 }
140 return false;
141 }
142 }
3.记得你调试的时候要用企业给的测试环境下的支付网址
4.一些我看视频的截图,你尝试看看