php教程 php手册 온라인 도서몰 9--결제 모듈

온라인 도서몰 9--결제 모듈

Dec 05, 2016 pm 01:26 PM

1. 결제 준비

public String paymentPre(HttpServletRequest req, HttpServletResponse resp)
		throws ServletException, IOException {
	req.setAttribute("order", orderService.load(req.getParameter("oid")));
	return "f:/jsps/order/pay.jsp";
}
로그인 후 복사

2. 결제방법

public String payment(HttpServletRequest req, HttpServletResponse resp)
		throws ServletException, IOException {
	Properties props = new Properties();
	props.load(this.getClass().getClassLoader().getResourceAsStream("payment.properties"));
	/*
	 * 1. 准备13个参数
	 */
	String p0_Cmd = "Buy";//业务类型,固定值Buy
	String p1_MerId = props.getProperty("p1_MerId");//商号编码,在易宝的唯一标识
	String p2_Order = req.getParameter("oid");//订单编码
	String p3_Amt = "0.01";//支付金额
	String p4_Cur = "CNY";//交易币种,固定值CNY
	String p5_Pid = "";//商品名称
	String p6_Pcat = "";//商品种类
	String p7_Pdesc = "";//商品描述
	String p8_Url = props.getProperty("p8_Url");//在支付成功后,易宝会访问这个地址。
	String p9_SAF = "";//送货地址
	String pa_MP = "";//扩展信息
	String pd_FrpId = req.getParameter("yh");//支付通道
	String pr_NeedResponse = "1";//应答机制,固定值1
	
	/*
	 * 2. 计算hmac
	 * 需要13个参数
	 * 需要keyValue
	 * 需要加密算法
	 */
	String keyValue = props.getProperty("keyValue");
	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);
	
	/*
	 * 3. 重定向到易宝的支付网关
	 */
	StringBuilder sb = new StringBuilder("https://www.yeepay.com/app-merchant-proxy/node");
	sb.append("?").append("p0_Cmd=").append(p0_Cmd);
	sb.append("&").append("p1_MerId=").append(p1_MerId);
	sb.append("&").append("p2_Order=").append(p2_Order);
	sb.append("&").append("p3_Amt=").append(p3_Amt);
	sb.append("&").append("p4_Cur=").append(p4_Cur);
	sb.append("&").append("p5_Pid=").append(p5_Pid);
	sb.append("&").append("p6_Pcat=").append(p6_Pcat);
	sb.append("&").append("p7_Pdesc=").append(p7_Pdesc);
	sb.append("&").append("p8_Url=").append(p8_Url);
	sb.append("&").append("p9_SAF=").append(p9_SAF);
	sb.append("&").append("pa_MP=").append(pa_MP);
	sb.append("&").append("pd_FrpId=").append(pd_FrpId);
	sb.append("&").append("pr_NeedResponse=").append(pr_NeedResponse);
	sb.append("&").append("hmac=").append(hmac);
	
	resp.sendRedirect(sb.toString());
	return null;
}
로그인 후 복사

3. 피드백 방법

결제가 성공하면 Yibao가 여기를 방문합니다
두 가지 방법으로 액세스합니다:
1. 사용자의 브라우저 리디렉션을 안내합니다(사용자가 브라우저를 닫으면 여기에 액세스할 수 없습니다)
2. 서버는 이 방법에 액세스하기 위해 지점 간 통신 방법을 사용합니다. (성공이 반환되어야 합니다. 그렇지 않으면 Yibao 서버가 이 메소드를 계속 호출합니다.)

public String back(HttpServletRequest req, HttpServletResponse resp)
		throws ServletException, IOException {
	/*
	 * 1. 获取12个参数
	 */
	String p1_MerId = req.getParameter("p1_MerId");
	String r0_Cmd = req.getParameter("r0_Cmd");
	String r1_Code = req.getParameter("r1_Code");
	String r2_TrxId = req.getParameter("r2_TrxId");
	String r3_Amt = req.getParameter("r3_Amt");
	String r4_Cur = req.getParameter("r4_Cur");
	String r5_Pid = req.getParameter("r5_Pid");
	String r6_Order = req.getParameter("r6_Order");
	String r7_Uid = req.getParameter("r7_Uid");
	String r8_MP = req.getParameter("r8_MP");
	String r9_BType = req.getParameter("r9_BType");
	String hmac = req.getParameter("hmac");
	/*
	 * 2. 获取keyValue
	 */
	Properties props = new Properties();
	props.load(this.getClass().getClassLoader().getResourceAsStream("payment.properties"));
	String keyValue = props.getProperty("keyValue");
	/*
	 * 3. 调用PaymentUtil的校验方法来校验调用者的身份
	 *   >如果校验失败:保存错误信息,转发到msg.jsp
	 *   >如果校验通过:
	 *     * 判断访问的方法是重定向还是点对点,如果要是重定向
	 *     修改订单状态,保存成功信息,转发到msg.jsp
	 *     * 如果是点对点:修改订单状态,返回success
	 */
	boolean bool = PaymentUtil.verifyCallback(hmac, p1_MerId, r0_Cmd, r1_Code, r2_TrxId,
			r3_Amt, r4_Cur, r5_Pid, r6_Order, r7_Uid, r8_MP, r9_BType,
			keyValue);
	if(!bool) {
		req.setAttribute("code", "error");
		req.setAttribute("msg", "无效的签名,支付失败!(你不是好人)");
		return "f:/jsps/msg.jsp";
	}
	if(r1_Code.equals("1")) {
		orderService.updateStatus(r6_Order, 2);
		if(r9_BType.equals("1")) {
			req.setAttribute("code", "success");
			req.setAttribute("msg", "恭喜,支付成功!");
			return "f:/jsps/msg.jsp";				
		} else if(r9_BType.equals("2")) {
			resp.getWriter().print("success");
		}
	}
	return null;
}
로그인 후 복사

4.pay.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>pay.jsp</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	<link rel="stylesheet" type="text/css" href="<c:url value='/jsps/css/order/pay.css'/>">
	<script type="text/javascript" src="<c:url value='/jquery/jquery-1.5.1.js'/>"></script>

<script type="text/javascript">
$(function() {
	$("img").click(function() {
		$("#" + $(this).attr("name")).attr("checked", true);
	});
});
</script>
  </head>
  
  <body>
<div class="divContent">
	<span class="spanPrice">支付金额:</span><span class="price_t">¥${order.total }</span>
	<span class="spanOid">编号:${order.oid }</span>
</div>
<form action="<c:url value='/OrderServlet'/>" method="post" id="form1" target="_top">
<input type="hidden" name="method" value="payment"/>
<input type="hidden" name="oid" value="${order.oid }"/>
<div class="divBank">
	<div class="divText">选择网上银行</div>
	<div style="margin-left: 20px;">
	  <div style="margin-bottom: 20px;">
		<input id="ICBC-NET-B2C" type="radio" name="yh" value="ICBC-NET-B2C" checked="checked"/>
		<img name="ICBC-NET-B2C" align="middle" src="<c:url value='/bank_img/icbc.bmp'/>"/>
		
		<input id="CMBCHINA-NET-B2C" type="radio" name="yh" value="CMBCHINA-NET-B2C"/>
		<img name="CMBCHINA-NET-B2C" align="middle" src="<c:url value='/bank_img/cmb.bmp'/>"/>

		<input id="ABC-NET-B2C" type="radio" name="yh" value="ABC-NET-B2C"/>
		<img name="ABC-NET-B2C" align="middle" src="<c:url value='/bank_img/abc.bmp'/>"/>
		
		<input id="CCB-NET-B2C" type="radio" name="yh" value="CCB-NET-B2C"/>
		<img name="CCB-NET-B2C" align="middle" src="<c:url value='/bank_img/ccb.bmp'/>"/>
	  </div>	
	  <div style="margin-bottom: 20px;">
		<input id="BCCB-NET-B2C" type="radio" name="yh" value="BCCB-NET-B2C"/>
		<img name="BCCB-NET-B2C" align="middle" src="<c:url value='/bank_img/bj.bmp'/>"/>

		<input id="BOCO-NET-B2C" type="radio" name="yh" value="BOCO-NET-B2C"/>
		<img name="BOCO-NET-B2C" align="middle" src="<c:url value='/bank_img/bcc.bmp'/>"/>

		<input id="CIB-NET-B2C" type="radio" name="yh" value="CIB-NET-B2C"/>
		<img name="CIB-NET-B2C" align="middle" src="<c:url value='/bank_img/cib.bmp'/>"/>

		<input id="NJCB-NET-B2C" type="radio" name="yh" value="NJCB-NET-B2C"/>
		<img name="NJCB-NET-B2C" align="middle" src="<c:url value='/bank_img/nanjing.bmp'/>"/>
	  </div>
	  <div style="margin-bottom: 20px;">
		<input id="CMBC-NET-B2C" type="radio" name="yh" value="CMBC-NET-B2C"/>
		<img name="CMBC-NET-B2C" align="middle" src="<c:url value='/bank_img/cmbc.bmp'/>"/>

		<input id="CEB-NET-B2C" type="radio" name="yh" value="CEB-NET-B2C"/>
		<img name="CEB-NET-B2C" align="middle" src="<c:url value='/bank_img/guangda.bmp'/>"/>

		<input id="BOC-NET-B2C" type="radio" name="yh" value="BOC-NET-B2C"/>
		<img name="BOC-NET-B2C" align="middle" src="<c:url value='/bank_img/bc.bmp'/>"/>

		<input id="PINGANBANK-NET" type="radio" name="yh" value="PINGANBANK-NET"/>
		<img name="PINGANBANK-NET" align="middle" src="<c:url value='/bank_img/pingan.bmp'/>"/>
	  </div>
	  <div style="margin-bottom: 20px;">
		<input id="CBHB-NET-B2C" type="radio" name="yh" value="CBHB-NET-B2C"/>
		<img name="CBHB-NET-B2C" align="middle" src="<c:url value='/bank_img/bh.bmp'/>"/>

		<input id="HKBEA-NET-B2C" type="radio" name="yh" value="HKBEA-NET-B2C"/>
		<img name="HKBEA-NET-B2C" align="middle" src="<c:url value='/bank_img/dy.bmp'/>"/>

		<input id="NBCB-NET-B2C" type="radio" name="yh" value="NBCB-NET-B2C"/>
		<img name="NBCB-NET-B2C" align="middle" src="<c:url value='/bank_img/ningbo.bmp'/>"/>

		<input id="ECITIC-NET-B2C" type="radio" name="yh" value="ECITIC-NET-B2C"/>
		<img name="ECITIC-NET-B2C" align="middle" src="<c:url value='/bank_img/zx.bmp'/>"/>
	  </div>
	  <div style="margin-bottom: 20px;">
		<input id="SDB-NET-B2C" type="radio" name="yh" value="SDB-NET-B2C"/>
		<img name="SDB-NET-B2C" align="middle" src="<c:url value='/bank_img/sfz.bmp'/>"/>

		<input id="GDB-NET-B2C" type="radio" name="yh" value="GDB-NET-B2C"/>
		<img name="GDB-NET-B2C" align="middle" src="<c:url value='/bank_img/gf.bmp'/>"/>

		<input id="SHB-NET-B2C" type="radio" name="yh" value="SHB-NET-B2C"/>
		<img name="SHB-NET-B2C" align="middle" src="<c:url value='/bank_img/sh.bmp'/>"/>

		<input id="SPDB-NET-B2C" type="radio" name="yh" value="SPDB-NET-B2C"/>
		<img name="SPDB-NET-B2C" align="middle" src="<c:url value='/bank_img/shpd.bmp'/>"/>
	  </div>
	  <div style="margin-bottom: 20px;">
		<input id="POST-NET-B2C" type="radio" name="yh" value="POST-NET-B2C"/>
		<img name="POST-NET-B2C" align="middle" src="<c:url value='/bank_img/post.bmp'/>"/>

		<input id="BJRCB-NET-B2C" type="radio" name="yh" value="BJRCB-NET-B2C"/>
		<img name="BJRCB-NET-B2C" align="middle" src="<c:url value='/bank_img/beijingnongshang.bmp'/>"/>

		<input id="HXB-NET-B2C" type="radio" name="yh" value="HXB-NET-B2C"/>
		<img name="HXB-NET-B2C" align="middle" src="<c:url value='/bank_img/hx.bmp'/>"/>

		<input id="CZ-NET-B2C" type="radio" name="yh" value="CZ-NET-B2C"/>
		<img name="CZ-NET-B2C" align="middle" src="<c:url value='/bank_img/zheshang.bmp'/>"/>
	  </div>
	</div>
	<div style="margin: 40px;">
		<a href="javascript:void $('#form1').submit();" class="linkNext">下一步</a>
	</div>
</div>
</form>
  </body>
</html>
로그인 후 복사

 

결제 속성

p1_MerId=10001126856
keyValue=69cl522AV6q613Ii4W6u8K6XuW8vM1N6bFgyv769220IuYe9u37N4y7rI4Pl
p8_Url=http\://localhost\:8080/goods/OrderServlet?method\=back
로그인 후 복사

 

 

 

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)