1.在线支付的两种常见支付方式和采用第三方支付公司的支付流程。
第三方支付公司的支付流程:
2.易宝:参考内容??
? ? ?商户账号:p1_MerId=10001126856
? ? ?秘钥:keyValue=69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl
? ? ?加密算法:PaymentUtil.java
? ? ?请求参数处理:PayServlet.java
? ? ?返回参数处理:CallbackServlet.java?
? ? ?易宝支付产品通用接口帮助文档.CHM? ?
? ? 电子签名的使用:在网站向易宝提交数据的时候通过网站提交的hmac码和易宝自己生产的hamc对比看数据在传递过程中是否被改变。
3.支付代码:
? ? ?1.jsp页面中提交<formid="orderForm" action="${ pageContext.request.contextPath}/order_payOrder.action" method="post">
action中进行处理:? ? ?
? ?2.Action处理
<span style="font-family:SimSun;font-size:18px;">public class OrderAction extends ActionSupport implements ModelDriven<Order>
{
// 模型驱动
private Order order = new Order();
public Order getModel()
{
// TODO Auto-generated method stub
return order;
}
// 接受支付通道编码
private String pd_FrpId;
public void setPd_FrpId(String pd_FrpId)
{
this.pd_FrpId = pd_FrpId;
}
// 接受付完款成功之后的相应参数。
private String r6_Order;
private String r3_Amt;
public void setr6_Order(String r6_Order)
{
this.r6_Order = r6_Order;
}
public void setr3_Amt(String r3_Amt)
{
this.r3_Amt = r3_Amt;
}
// 为订单付款的方法
public String payOrder() throws IOException
{
// 为订单付款
String p0_Cmd = "Buy"; // 业务类型
String p1_MerId = "10001126856"; // 商户编号
String p2_Order = order.getOid().toString(); // 订单编号
String p3_Amt = "0.01"; // 支付金额
String p4_Cur = "CNY"; // 交易货币
String p5_Pid = ""; // 商品名称
String p6_Pcat = ""; //商品类型
String p7_Pdesc = ""; //商品描述
String p8_Url = "http://localhost:8080/shop3.8/order_callBack.action"; //
String p9_SAF = ""; //送货地址
String pa_MP = ""; //扩展信息
String pd_FrpId = this.pd_FrpId; // 支付通道编码
String pr_NeedResponse = "1"; // 应答机制
String keyValue = "69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl"; // 秘钥
String hmac = PaymentUtil.buildHmac(p0_Cmd, p1_MerId, p2_Order, p3_Amt,
p4_Cur, p5_Pid, p6_Pcat, p7_Pdesc, p8_Url, p9_SAF, pa_MP,
pd_FrpId, pr_NeedResponse, keyValue); //
StringBuffer stringBuffer = new StringBuffer(
"https://www.yeepay.com/app-merchant-proxy/node?");
stringBuffer.append("p0_Cmd=").append(p0_Cmd).append("&");
stringBuffer.append("p1_MerId=").append(p1_MerId).append("&");
stringBuffer.append("p2_Order=").append(p2_Order).append("&");
stringBuffer.append("p3_Amt=").append(p3_Amt).append("&");
stringBuffer.append("p4_Cur=").append(p4_Cur).append("&");
stringBuffer.append("p5_Pid=").append(p5_Pid).append("&");
stringBuffer.append("p6_Pcat=").append(p6_Pcat).append("&");
stringBuffer.append("p7_Pdesc=").append(p7_Pdesc).append("&");
stringBuffer.append("p8_Url=").append(p8_Url).append("&");
stringBuffer.append("p9_SAF=").append(p9_SAF).append("&");
stringBuffer.append("pa_MP=").append(pa_MP).append("&");
stringBuffer.append("pd_FrpId=").append(pd_FrpId).append("&");
stringBuffer.append("pr_NeedResponse=").append(pr_NeedResponse)
.append("&");
stringBuffer.append("keyValue=").append(keyValue).append("&");
stringBuffer.append("hmac=").append(hmac);
// 重定向到易宝
ServletActionContext.getResponse()
.sendRedirect(stringBuffer.toString());
return NONE;
}
</span>
? ? 没有付款的商品跳转到付快页面
? ?4.付款成功之后的转向操作:
? ? ?易宝说明:
? ? ?点对点需要固定的ip地址,在网站接受第三方公司传递来的数据时也要进行hmac码的验证操作。判断数据时候为真实数据。
? ? 5.转向代码
<span style="font-family:SimSun;font-size:18px;">// 订单成功之后的转向
public String callBack()
{
// 修改订单状态,改为已经付款
Order cuOrder = orderService.findByOid(Integer.parseInt(r6_Order));
cuOrder.setState(2);
orderService.update(cuOrder);
// 在页面显示付款成功信息!
this.addActionMessage("订单付款成功:订单编号" + r6_Order + "付款金额:" + r3_Amt);
return "msg";
}
</span>
??
? 6.最后显示付款成功页面