银联在线支付---利用测试案例代码模拟支付应用(修改)

 一、工程搭建

          新建一个Web工程,命名为PayOnLine,把你下载好的案例代码拷贝到你的工程下,我的代码目录如下:
             


acp_sdk.properties配置文件需要放在类根路劲下,里面的参数配置信息,下面是案例提供的配置提示:
0. 注意:
1)依赖包和upacp_sdk-1.0.0.jar都需加到buildpath。
2)acp_sdk.properties放到src根目录下。另外如果用的不是eclipse/MyEclipse可能这个文件默认不会被拷贝到classes目录下,导致加载不到这个文件,请注意修改设置或手工拷贝这个文件。

1. 修改acp_sdk.properties,
1) 证书改下自己本地路径,证书密码测试环境就是000000,生产自己修改。

2.1 wap/网关的消费:调用Form_6_2_FrontConsume,商户号请改为自己的商户号,会生成一段html,把它打印到浏览器即可跳转支付页面。比如可以写一个servlet直接打印页面,或者把html复制到一个记事本里后缀改html再浏览器打开。

2.2 控件的消费:调用Form_6_2_AppConsume,商户号请改为自己的商户号,会访问后台获取tn,把tn传给你们手机app。

支付卡:
平安银行借记卡:6216261000000000018
证件号:341126197709218366
手机号:13552535506
密码:123456
姓名:全渠道
短信验证码:123456(wap/控件)111111(PC)
(短信验证码记得点下获取验证码之后再输入)

3. Form_6_5_Query为查询接口,商户号请改为自己的商户号,注意修改txnTime和orderId为被查询交易的txnTime和orderId。

4. Form_6_3_ConsumeUndo和Form_6_4_Refund分别为消费撤销接口、退货接口,商户号请改为自己的商户号,注意修改origQryId为自己需要退款的那笔消费的queryId。

5. FrontRcvResponse和BackRcvResponse为前后台通知接口,为2个Servlet,请注意配置web.xml,另外FrontRcvResponse会使用“其他文件/utf8_result.jsp”。交易完成会调用通知接口。

6. Form_6_6_FileTransfer为文件下载接口。
文件下载接口注意点:
1) 请使用自己的【真实商户号】测试。开发包的商户号、自助化测试平台申请的商户号都是不能测试文件下载的,会反http状态500,内容为空。如果真实商户号下载提示无文件但确定有交易,一般是商户号没有文件传输类交易的权限,如需要开通请联系业务运营中心operation@unionpay.com。
2) 请先建立好文件夹并确保有文件写入权限。

7. 如需使用gbk编码,请自行修改代码内写的编码和代码文件本身的编码为gbk。

8. 关于配置文件加载问题:
SDKConfig.getConfig().loadPropertiesFromSrc()这句话在整个工程启用的时候执行一次即可,其余地方都可删除。
比如可以建立个servlet,初始化时调用,web.xml中设置成启动时就加载这个servlet:

InitServlet.java:
public class InitServlet extends HttpServlet{
	@Override
	public void init() throws ServletException {
		SDKConfig.getConfig().loadPropertiesFromSrc();// 从classpath加载acp_sdk.properties文件
		super.init();
	}
}

web.xml:
  <servlet>
  	<servlet-name>InitServlet</servlet-name>
  	<servlet-class>com.unionpay.acp.demo.InitServlet</servlet-class>
  	<load-on-startup>0</load-on-startup>
  </servlet>


9. 日志文件路径问题:
可rar打开upacp_sdk-1.0.0.jar,修改里面log4j.properties配置的路径。

10. 切换生产时请一定看下https://open.unionpay.com/ajweb/help/faq/listByType?faqType=prod中的问题,特别是“切换生产有哪些需要改动的地方”的这个FAQ。




到此工程搭建完毕.

Form_6_2_FrontConsume.java 就是对应的网关支付案例代码,改动如下三行代码就可以用了。




直接运行,可以看到控制台最后一行,打印出了HTML代码,把它复制出来,放在一个空的html文件里. 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
	<form id="pay_form"
		action="https://101.231.204.80:5000/gateway/api/frontTransReq.do"
		method="post">
		<input type="hidden" name="txnType" id="txnType" value="01" /><input
			type="hidden" name="frontUrl" id="frontUrl"
			value="http://localhost:8080/PayOnLine/acp_front_url.do" /><input
			type="hidden" name="currencyCode" id="currencyCode" value="156" /><input
			type="hidden" name="channelType" id="channelType" value="08" /><input
			type="hidden" name="merId" id="merId" value="777290058112538" /><input
			type="hidden" name="txnSubType" id="txnSubType" value="01" /><input
			type="hidden" name="txnAmt" id="txnAmt" value="1" /><input
			type="hidden" name="version" id="version" value="5.0.0" /><input
			type="hidden" name="signMethod" id="signMethod" value="01" /><input
			type="hidden" name="backUrl" id="backUrl"
			value="http://localhost:8080/PayOnLine/acp_back_url.do" /><input
			type="hidden" name="certId" id="certId"
			value="124876885185794726986301355951670452718" /><input
			type="hidden" name="encoding" id="encoding" value="UTF-8" /><input
			type="hidden" name="bizType" id="bizType" value="000201" /><input
			type="hidden" name="signature" id="signature"
			value="qlFuEQS9ADJ0iN+DkG4z09hbAG7a7MqwZPkbQvzDcURxE9ob4N/9/wTq11iQedygOCZkSFIU49dy41pe1pVN09vDOq3uS3TTmeQh3vchh1VmvcIBV+pWeBeq4FGhkY5TudqU/r52W9Sw8syc5YjU14UvRoPUOvfZLGND23JhGsY=" /><input
			type="hidden" name="orderId" id="orderId" value="20150422172935" /><input
			type="hidden" name="accessType" id="accessType" value="0" /><input
			type="hidden" name="txnTime" id="txnTime" value="20150422172935" />
	</form>
</body>
<script type="text/javascript">
	document.all.pay_form.submit();
</script>
</html>

在IE浏览器里,运行后就可以看见:




输入上一篇说的测试卡号,点击下一步:



输入测试的参数信息,就可以完成0.01元的支付了,感觉怎么样,就是这么简单。



为了方便,我提供下网关支付的案例代码链接,供大家下载。


测试遇到的问题

1.运行JAVA代码控制台报错,请确认你的测试证书是否配置好了.
#########################签名证书配置 ################################
######(以下配置为测试环境:入网测试环境用,生产环境配置见下述文档说明))#######
##签名证书路径
acpsdk.signCert.path=D\:\\certs\\PM_700000000000001_acp.pfx
##签名证书密码
acpsdk.signCert.pwd=000000
##签名证书类型
acpsdk.signCert.type=PKCS12

上面配置的路径里必须要有对应的证书文件。证书可以在官网上的案例代码里下载.


2. JAVA运行后得到的HTML浏览器打开后提示如下错误:



经查官网上的应答码说如下:
应答码列表

【所属系统:】 全渠道

【应答码:】 5131008

应答码描述:无此交易权限

解决方案 :

wap和网关支付的时候会报这个错误,为没开权限。如使用的是真实商户号,请联系签约的业务或者业务运营中心申请开放权限。 如果用的是自助化平台的商户号,需要选一下要测试这个产品,方法为:右上角-我的产品-未测试,在跳转网关支付/手机网页支付点开始测试,点击后10分钟生效。



操作步骤如下:


点击开始测试即可。








转载于:https://www.cnblogs.com/wuyida/p/6300324.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个完整的Java-Spring Boot集成银联充值的逻辑代码案例。这个案例包含了充值请求的处理、支付结果的回调处理以及验签等步骤。 首先,您需要添加银联支付的依赖项。在您的pom.xml文件中添加以下依赖项: ```xml <dependency> <groupId>com.unionpay</groupId> <artifactId>acp-sdk</artifactId> <version>1.0.0</version> </dependency> ``` 然后,您可以创建一个Controller来处理充值请求和支付结果回调。在这个示例中,我们将使用POST方法来接收充值请求,并使用异步方式接收支付结果回调。 ```java import com.unionpay.acp.sdk.AcpService; import com.unionpay.acp.sdk.LogUtil; import com.unionpay.acp.sdk.SDKConfig; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.PostConstruct; import java.util.HashMap; import java.util.Map; @RestController @RequestMapping("/payment") public class PaymentController { @Value("${unionpay.merId}") private String merId; // 商户号 @Value("${unionpay.frontUrl}") private String frontUrl; // 前台回调地址 @Value("${unionpay.backUrl}") private String backUrl; // 后台回调地址 @PostConstruct public void init() { // 初始化银联支付配置 SDKConfig.getConfig().loadPropertiesFromSrc(); } @PostMapping("/recharge") public String recharge(@RequestBody RechargeRequest request) { Map<String, String> requestData = new HashMap<>(); requestData.put("version", "5.1.0"); requestData.put("encoding", "UTF-8"); requestData.put("signMethod", "01"); requestData.put("txnType", "01"); requestData.put("txnSubType", "01"); requestData.put("bizType", "000201"); requestData.put("channelType", "08"); requestData.put("merId", merId); requestData.put("accessType", "0"); requestData.put("orderId", request.getOrderId()); requestData.put("txnTime", request.getTxnTime()); requestData.put("txnAmt", request.getTxnAmt()); requestData.put("currencyCode", "156"); requestData.put("frontUrl", frontUrl); requestData.put("backUrl", backUrl); requestData.put("payTimeout", request.getPayTimeout()); Map<String, String> responseData = AcpService.post(requestData, SDKConfig.getConfig().getBackRequestUrl()); if (AcpService.validate(responseData, "UTF-8")) { if ("00".equals(responseData.get("respCode"))) { // 充值成功,处理业务逻辑 return "success"; } else { // 充值失败,处理业务逻辑 return "failure"; } } else { // 验签失败,处理业务逻辑 return "failure"; } } @PostMapping("/callback") public void callback(@RequestBody Map<String, String> params) { if (AcpService.validate(params, "UTF-8")) { if ("00".equals(params.get("respCode"))) { // 支付成功,处理业务逻辑 // TODO: 处理支付成功的业务逻辑 } else { // 支付失败,处理业务逻辑 // TODO: 处理支付失败的业务逻辑 } } else { // 验签失败,处理业务逻辑 // TODO: 处理验签失败的业务逻辑 } } } ``` 在上面的代码中,我们使用银联提供的SDK来处理充值请求和支付结果回调。在`recharge`方法中,我们调用了银联支付接口进行充值,并根据支付结果进行相应的业务逻辑处理。在`callback`方法中,我们接收支付结果回调,并进行验签和业务逻辑处理。 请注意,上述代码仅提供了一个简单的示例,实际集成银联支付时还需要考虑更多的安全性和错误处理。您可以根据银联提供的开发文档进行更详细的配置和调整。 希望对您有所帮助!如果您有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值