工商银行银联支付接口。

发现网上的资料对于JAVA版本并不是很详细。
正好公司要做,我也边摸索边学习一下~

要做银联支付,先是测这个工商银行的接口。

给我发了一个文件:

我是用的JAVA,你们看自己用的什么看对应demo哈~

首先当然是看最下面那个doc文档,里面有个发送数据和接受数据的表单,定义了很多字段。我们就是要把这个发送数据表单构造出来,传给银行,然后银行再把接收数据的表单发给我们。文档我不截图了,自己去看~百度文库也一大堆的。

参考了这个:http://www.tuicool.com/articles/YBRZNnz

下面是纯JAVA的说明。按照步骤做。测试证书和key(不在上面的文件夹里,是另外发给我的)放在D盘(之后会改成配置文件获取),导入jar包,把javaApiDemo.jsp里的password改成银行发给你的那个密码。

放到服务器上,返回如下页面:

欧卡~接下来开始正式的。

建立了一个表单对应的ICBC类和TranData类(放在一个类就可以了,我开始弄错了就分开了 ,一个类里面更省事儿)

ICBC:

package com.mvc.product.model;public class ICBC {//必输:1,选输:2//
//  private String orderPostUrl = "https://B2C.icbc.com.cn/servlet/ICBCINBSEBusinessServlet";// 1接口版本号private String interfaceName = "ICBC_PERBANK_B2C";// 1交易日期时间private String interfaceVersion = "1.0.0.11";// 1交易数据// 整合所有交易数据形成的xml明文串,并做BASE64编码;// 具体格式定义见下文;// 注意:// 需有xml头属性;整个字段使用BASE64编码;// xml明文中没有回车换行和多余空格;private String tranData;//  1订单签名数据//  必输,// 商户使用工行提供的签名API和商户证书将tranData的xml明文串进行签名,得到二进制签名数据,然后进行BASE64编码后得到可视的merSignMsg;//  注意:签名时是针对tranData的xml明文,不是将tranData进行BASE64编码后的串;private String merSignMsg;//  1商城证书公钥//  商户用二进制方式读取证书公钥文件后,进行BASE64编码后产生的字符串;private String merCert;public String getInterfaceName() {return interfaceName;}public void setInterfaceName(String interfaceName) {this.interfaceName = interfaceName;}public String getInterfaceVersion() {return interfaceVersion;}public void setInterfaceVersion(String interfaceVersion) {this.interfaceVersion = interfaceVersion;}public String getTranData() {return tranData;}public void setTranData(String tranData) {this.tranData = tranData;}public String getMerSignMsg() {return merSignMsg;}public void setMerSignMsg(String merSignMsg) {this.merSignMsg = merSignMsg;}public String getMerCert() {return merCert;}public void setMerCert(String merCert) {this.merCert = merCert;}}

TranData:

public class TranData {//必输:1,选输:2// 1接口版本号private String interfaceName = "ICBC_PERBANK_B2C";// 1交易日期时间private String interfaceVersion = "1.0.0.11";// 1交易日期时间:目前要求在银行系统当前时间的前后十分钟范围内,否则判定交易时间非法。private String orderDate;// 1订单号:客户支付后商户网站产生的一个唯一的定单号,该订单号应该在相当长的时间内不重复。工行通过订单号加订单日期来唯一确认一笔订单的重复性。private Long orderid;// 1订单金额:客户支付订单的总金额,一笔订单一个,以分为单位。不可以为零,必需符合金额标准。private Double amount;// 1分期付款期数:取值:1、3、6、9、12、18、24;1代表全额付款,必须为以上数值,否则订单校验不通过。private Integer installmentTimes = 1;// TODO// 1商户账号:商户入账账号,只能交易时指定。(商户付给银行手续费的账户,可以在开户的时候指定,也可以用交易指定方式;用交易指定方式则使用此商户账号)private String merAcct;// 2商品编号private String goodsID = "";// 1商品名称private String goodsName = "";// 2商品数量private Integer goodsNum = 1;// 2已含运费金额private Double carriageAmt;// 1检验联名标志:取值“1”:客户支付时,网银判断该客户是否与商户联名,是则按上送金额扣帐,否则展现未联名错误;取值“0”:不检验客户是否与商户联名,按上送金额扣帐。private Integer verifyJoinFlag = 0;// 2语言版本:默认为中文版 。取值:“EN_US”为英文版;取值:“ZH_CN”或其他为中文版。注意:大小写敏感。private String language = "ZH_CN";// 1支付币种:用来区分一笔支付的币种,目前工行只支持使用人民币(001)支付。 取值: “001”private String curType = "001";//TODO// 1商户代码:唯一确定一个商户的代码,由商户在工行开户时,由工行告知商户。private String merID;// 1支持订单支付的银行卡种类:默认“2”。取值范围为0、1、2,其中0表示仅允许使用借记卡支付,1表示仅允许使用信用卡支付,2表示借记卡和信用卡都能对订单进行支付private Integer creditType = 2;// 1通知类型// 在交易转账处理完成后把交易结果通知商户的处理模式。// 取值“HS”:在交易完成后实时将通知信息以HTTP协议POST方式,主动发送给商户,发送地址为商户端随订单数据提交的接收工行支付结果的URL即表单中的merURL字段;// 取值“AG”:在交易完成后不通知商户。商户需使用浏览器登录工行的B2C商户服务网站,或者使用工行提供的客户端程序API主动获取通知信息。private String notifyType = "HS";// 2结果发送类型// 选输// 取值“0”:无论支付成功或者失败,银行都向商户发送交易通知信息;// 取值“1”,银行只向商户发送交易成功的通知信息。// 只有通知方式为HS时此值有效,如果使用AG方式,可不上送此项,但签名数据中必须包含此项,取值可为空。private Integer resultType = 1;//TODO// 2商户reference:上送商户网站域名(支持通配符,例如“*.某B2C商城.com”),如果上送,工行会在客户支付订单时,校验商户上送域名与客户跳转工行支付页面之前网站域名的一致性。private String merReference = "";//TODO// 2客户端IP:选输,工行在支付页面显示该信息。   注意: 1、   使用IPV4格式。 2、    上送的是客户端的公网IP。 3、    当商户reference项送空时,该项必输。private String merCustomIp = "";//TODO// 2虚拟商品/实物商品标志位:选输,取值“0”:虚拟商品; 取值“1”,实物商品。private Integer goodsType = 0;// 2买家用户号:选输,工行在支付页面显示该信息。private String merCustomID = "";// 2买家联系电话:选输,工行在支付页面显示该信息。private String merCustomPhone = "";// 2收货地址:选输,工行在支付页面显示该信息。private String goodsAddress = "";// 2订单备注:选输,工行在支付页面显示该信息。private String merOrderRemark = "";// 2商城提示private String merHint = "";// 2备注字段1private String remark1 = "";// 2备注字段2private String remark2 = "";// 1返回商户URL// 必须合法的URL,交易结束,将客户引导到商户的此url,即通过客户浏览器post交易结果信息到商户的此URL// 注意:该URL应使用http协议(不能使用https协议),端口号应为80或不指定。private String merURL = "";// 2返回商户变量:商户自定义,当返回银行结果时,作为一个隐藏域变量,商户可以用此变量维护session等等。由客户端浏览器支付完成后提交通知结果时是明文传输,建议商户对此变量使用额外安全防范措施,如签名、base64private String merVAR = "";// 2工银e支付注册标志:工银e支付注册标志,标识客户在支付该笔订单时,是否使用订单指定的下述信息注册工银e支付。 0-否,1-是private String e_isMerFlag = "";// 2客户姓名private String e_Name = "";// 2客户手机号:如果工银e支付注册标志e_isMerFlag上送1,则此字段必输private String e_TelNum = "";// 2客户证件类型:0:身份证     1:护照 2:军官证     3:士兵证     4:回乡证(港澳台往来通行证)     5:临时身份证     6:户口本     7:其他       9:警官证     12:外国人永久居住证       21:边民证 private String e_CredType = "";// 2客户证件号private String e_CredNum = "";public String getInterfaceName() {return interfaceName;}public void setInterfaceName(String interfaceName) {this.interfaceName = interfaceName;}public String getInterfaceVersion() {return interfaceVersion;}public void setInterfaceVersion(String interfaceVersion) {this.interfaceVersion = interfaceVersion;}public String getOrderDate() {return orderDate;}public void setOrderDate(String orderDate) {this.orderDate = orderDate;}public Long getOrderid() {return orderid;}public void setOrderid(Long orderid) {this.orderid = orderid;}public Double getAmount() {return amount;}public void setAmount(Double amount) {this.amount = amount;}public Integer getInstallmentTimes() {return installmentTimes;}public void setInstallmentTimes(Integer installmentTimes) {this.installmentTimes = installmentTimes;}public String getMerAcct() {return merAcct;}public void setMerAcct(String merAcct) {this.merAcct = merAcct;}public String getGoodsID() {return goodsID;}public void setGoodsID(String goodsID) {this.goodsID = goodsID;}public String getGoodsName() {return goodsName;}public void setGoodsName(String goodsName) {this.goodsName = goodsName;}public Integer getGoodsNum() {return goodsNum;}public void setGoodsNum(Integer goodsNum) {this.goodsNum = goodsNum;}public Double getCarriageAmt() {return carriageAmt;}public void setCarriageAmt(Double carriageAmt) {this.carriageAmt = carriageAmt;}public Integer getVerifyJoinFlag() {return verifyJoinFlag;}public void setVerifyJoinFlag(Integer verifyJoinFlag) {this.verifyJoinFlag = verifyJoinFlag;}public String getLanguage() {return language;}public void setLanguage(String language) {this.language = language;}public String getCurType() {return curType;}public void setCurType(String curType) {this.curType = curType;}public String getMerID() {return merID;}public void setMerID(String merID) {this.merID = merID;}public Integer getCreditType() {return creditType;}public void setCreditType(Integer creditType) {this.creditType = creditType;}public String getNotifyType() {return notifyType;}public void setNotifyType(String notifyType) {this.notifyType = notifyType;}public Integer getResultType() {return resultType;}public void setResultType(Integer resultType) {this.resultType = resultType;}public String getMerReference() {return merReference;}public void setMerReference(String merReference) {this.merReference = merReference;}public String getMerCustomIp() {return merCustomIp;}public void setMerCustomIp(String merCustomIp) {this.merCustomIp = merCustomIp;}public Integer getGoodsType() {return goodsType;}public void setGoodsType(Integer goodsType) {this.goodsType = goodsType;}public String getMerCustomID() {return merCustomID;}public void setMerCustomID(String merCustomID) {this.merCustomID = merCustomID;}public String getMerCustomPhone() {return merCustomPhone;}public void setMerCustomPhone(String merCustomPhone) {this.merCustomPhone = merCustomPhone;}public String getGoodsAddress() {return goodsAddress;}public void setGoodsAddress(String goodsAddress) {this.goodsAddress = goodsAddress;}public String getMerOrderRemark() {return merOrderRemark;}public void setMerOrderRemark(String merOrderRemark) {this.merOrderRemark = merOrderRemark;}public String getMerHint() {return merHint;}public void setMerHint(String merHint) {this.merHint = merHint;}public String getRemark1() {return remark1;}public void setRemark1(String remark1) {this.remark1 = remark1;}public String getRemark2() {return remark2;}public void setRemark2(String remark2) {this.remark2 = remark2;}public String getMerURL() {return merURL;}public void setMerURL(String merURL) {this.merURL = merURL;}public String getMerVAR() {return merVAR;}public void setMerVAR(String merVAR) {this.merVAR = merVAR;}public String getE_isMerFlag() {return e_isMerFlag;}public void setE_isMerFlag(String e_isMerFlag) {this.e_isMerFlag = e_isMerFlag;}public String getE_Name() {return e_Name;}public void setE_Name(String e_Name) {this.e_Name = e_Name;}public String getE_TelNum() {return e_TelNum;}public void setE_TelNum(String e_TelNum) {this.e_TelNum = e_TelNum;}public String getE_CredType() {return e_CredType;}public void setE_CredType(String e_CredType) {this.e_CredType = e_CredType;}public String getE_CredNum() {return e_CredNum;}public void setE_CredNum(String e_CredNum) {this.e_CredNum = e_CredNum;}}

这些就是文档里定义的要传过去的表单实体类。。

构造一个表单提交给银行给的那个地址。

跳转到表单页面构造表单的方法:

 @RequestMapping("toPayOrder/{orderId}")public String toPayOrder(HttpServletRequest request, HttpServletResponse response,@PathVariable Long orderId){Order order =  orderManager.getByObjectId(orderId);List<OrderItem> orderItems = orderItemManager.getOrderItemsByOrderId(orderId);String goodsID = "";String goodsName = "";
//        for (OrderItem item : orderItems) {
//          goodsID += item.getObjectId()+ ",";
//          goodsName += item.getProduct().getName() + ",";
//      }
//        goodsID.substring(0, goodsID.length()-1);
//        goodsName.substring(0, goodsID.length()-1);
//      if (goodsID.length()>=30) {
//          goodsID.substring(0, 25);
//          goodsID += "等";
//      }
//      if (goodsName.length()>=60) {
//          goodsName.substring(0, 55);
//          goodsName += "等";
//      }String merURL = "http://localhost:8000/ys/order/getReturnValue";ICBC icbcModel = new ICBC();TranData tranData = new TranData();SimpleDateFormat myFmt=new SimpleDateFormat("yyyyMMddHHmmss");      tranData.setOrderDate(myFmt.format(new Date()));tranData.setOrderid(orderId);tranData.setAmount((order.getTotal()*100));tranData.setGoodsName("50jin订单");tranData.setGoodsID("");tranData.setGoodsName("测试订单");tranData.setMerReference("localhost");tranData.setMerCustomIp("127.0.0.1");// TODO  商户账号tranData.setMerAcct("10011********017989");// TODO  商户代码tranData.setMerID("1001******4821");// TODO  返回商户URLtranData.setMerURL(merURL);StringBuilder strXml = new StringBuilder();strXml.append("<?xml version=\"1.0\" encoding=\"GBK\" standalone=\"no\"?>");strXml.append("<B2CReq>");//接口名称strXml.append("<interfaceName>" + tranData.getInterfaceName() + "</interfaceName>");//接口版本号strXml.append("<interfaceVersion>" + tranData.getInterfaceVersion() + "</interfaceVersion>");//订单信息strXml.append("<orderInfo>");//交易日期时间strXml.append("<orderDate>20141130144920</orderDate>");//支付币种strXml.append("<curType>" + tranData.getCurType() + "</curType>");//商户代码strXml.append("<merID>" + tranData.getMerID() + "</merID>");//订单信息列表strXml.append("<subOrderInfoList>");//订单信息strXml.append("<subOrderInfo>");//订单编号strXml.append("<orderid>" + orderId + "</orderid>");//订单金额strXml.append("<amount>" + tranData.getAmount().intValue() + "</amount> ");//分期付款期数 1代表全额付款strXml.append("<installmentTimes>" + tranData.getInstallmentTimes() + "</installmentTimes>");//商户账号strXml.append("<merAcct>1001********0017989</merAcct>");//商品编号strXml.append("<goodsID>" + tranData.getGoodsID() + "</goodsID>");//商品名称strXml.append("<goodsName>" + tranData.getGoodsName() + "</goodsName>");//商品数量strXml.append("<goodsNum>" + order.getItemCount() + "</goodsNum>");//已含运费金额strXml.append("<carriageAmt></carriageAmt>");strXml.append("</subOrderInfo>");strXml.append("</subOrderInfoList>");strXml.append("</orderInfo>");strXml.append("<custom>");//检验联名标志 取值“1”:客户支付时,网银判断该客户是否与商户联名strXml.append("<verifyJoinFlag>" + tranData.getVerifyJoinFlag() + "</verifyJoinFlag>");//语言版本 取值:“EN_US”为英文版;取值:“ZH_CN”或其他为中文版strXml.append("<Language>" + tranData.getLanguage() + "</Language>");strXml.append("</custom>");strXml.append("<message>");//支持订单支付的银行卡种类strXml.append("<creditType>" + tranData.getCreditType() + "</creditType>");//通知类型strXml.append("<notifyType>" + tranData.getNotifyType() + "</notifyType>");//结果发送类型strXml.append("<resultType>" + tranData.getResultType() + "</resultType>");//商户referencestrXml.append("<merReference>" + tranData.getMerReference() + "</merReference>");//客户端IP 当商户reference项送空时,该项必输strXml.append("<merCustomIp>" + tranData.getMerCustomIp() + "</merCustomIp>");//虚拟商品/实物商品标志位 取值“0”:虚拟商品 取值“1”,实物商品strXml.append("<goodsType>" + tranData.getGoodsType() + "</goodsType>");//买家用户号strXml.append("<merCustomID></merCustomID>");//买家联系电话strXml.append("<merCustomPhone></merCustomPhone>");//收货地址strXml.append("<goodsAddress></goodsAddress>");//订单备注strXml.append("<merOrderRemark></merOrderRemark>");//商城提示strXml.append("<merHint></merHint>");//备注字段1strXml.append("<remark1></remark1>");//备注字段2strXml.append("<remark2></remark2>");//返回商户URLstrXml.append("<merURL>" + tranData.getMerURL() + "</merURL>");//返回商户变量strXml.append("<merVAR>" + tranData.getMerVAR() + "</merVAR>");strXml.append("</message>");strXml.append("<extend>");strXml.append("<e_isMerFlag>" + tranData.getE_isMerFlag() + "</e_isMerFlag>");strXml.append("<e_Name>" + tranData.getE_Name() + "</e_Name>");strXml.append("<e_TelNum>" + tranData.getE_TelNum() + "</e_TelNum>");strXml.append("<e_CredType>" + tranData.getE_CredType() + "</e_CredType>");strXml.append("<e_CredNum>" + tranData.getE_CredNum() + "</e_CredNum>");strXml.append("</extend>");strXml.append("</B2CReq>");//获取工商银行验证
//        CBCPayOnline.getCheckInfo(icbcModel);
//        byte[] temp =  ReturnValue.base64enc(strXml.toString().getBytes());icbcModel.setTranData(strXml.toString());CBCPayOnline cbcPayOnline = new CBCPayOnline();cbcPayOnline.getBase64ICBC(icbcModel);
//        icbcModel.setTranData(returnValue);//将订单数据送往页面提交request.setAttribute("ICBC", icbcModel);request.setAttribute("tranData", tranData);request.setAttribute("order", order);
//      return getFileBasePath() + "javaApiDemo";return getFileBasePath() + "toPayOrder";}

工行base64加密:

我们需要加密的有三个字段:tranData,merSignMsg,merCert

其中merSignMsg和merCert的加密,在javaApiDemo.jsp里已经有了。tranData就是自己把它base64加密。

public class CBCPayOnline {public static final String ICBC_PROPERTIES = "icbc.properties";private static String propFileName = "icbc.properties"; // 指定资源文件保存的位置private static Properties prop = new Properties(); // 创建并实例化Properties对象的实例private static String groupName;// 集团名称private static String groupNo;// 集团编号private static String account;// 基本账号private static String shopName;// 商城中文名private static String shopCode;// 商城代码private static String crtName;// 证书名称private static String crtPasswd;// 证书密码private static String icbcUrl;// B2C商户支付页面连接地址static {// 相关参数定义CBCPayOnline _client = new CBCPayOnline();try {prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(ICBC_PROPERTIES));groupName = prop.getProperty("groupName");groupNo = prop.getProperty("groupNo");account = prop.getProperty("account");shopName = prop.getProperty("shopName");shopCode = prop.getProperty("shopCode");crtName = prop.getProperty("crtName");crtPasswd = prop.getProperty("crtPasswd");} catch (Exception e) {e.printStackTrace();}}public ICBC getBase64ICBC(ICBC icbcModel) {String tranData = icbcModel.getTranData();System.out.println("明文:" + tranData);String password = crtPasswd;String returnTransData = "";String returnSignMsg = "";String returnCert = "";try {byte[] byteSrc = tranData.getBytes();char[] keyPass = password.toCharArray();FileInputStream in1 = new FileInputStream("d:\\user.crt");byte[] bcert = new byte[in1.available()];in1.read(bcert);in1.close();FileInputStream in2 = new FileInputStream("d:\\user.key");byte[] bkey = new byte[in2.available()];in2.read(bkey);in2.close();byte[] sign = ReturnValue.sign(byteSrc, byteSrc.length, bkey, keyPass);if (sign == null) {System.out.println("签名失败,签名返回为空。请检查证书私钥和私钥保护口令是否正确。");} else {System.out.println("签名成功");byte[] transDataByte = ReturnValue.base64enc(tranData.getBytes());String transDataBase64 = new String(transDataByte).toString();System.out.println("XML明文BASE64编码:" + transDataBase64);byte[] EncSign = ReturnValue.base64enc(sign);String SignMsgBase64 = new String(EncSign).toString();System.out.println("签名信息BASE64编码:" + SignMsgBase64);byte[] EncCert = ReturnValue.base64enc(bcert);String CertBase64 = new String(EncCert).toString();System.out.println("证书公钥BASE64编码:" + CertBase64);byte[] DecSign = ReturnValue.base64dec(EncSign);if (DecSign != null) {System.out.println("签名信息BASE64解码成功");byte[] DecCert = ReturnValue.base64dec(EncCert);if (DecCert != null) {System.out.println("证书公钥BASE64解码成功");int a = ReturnValue.verifySign(byteSrc, byteSrc.length, DecCert, DecSign);if (a == 0)System.out.println("验签成功");elseSystem.out.println("验签失败<br>验证返回码:" + a);} elseSystem.out.println("证书BASE64解码失败");} elseSystem.out.println("签名信息BASE64解码失败");returnTransData = transDataBase64;returnSignMsg = SignMsgBase64;returnCert = CertBase64;}} catch (Exception e) {System.out.println(e);}icbcModel.setTranData(returnTransData);icbcModel.setMerSignMsg(returnSignMsg);icbcModel.setMerCert(returnCert);return icbcModel;}}

传送表单到银行的页面toPayOrder.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ include file="../common/header.jsp"%><base target="_self"/>
<title><jdf:message code="跳转到支付页面" /></title>
</head>
<body><div class="box border"><div class="box-title"><h2><span class="glyphicon glyphicon-user"></span><jdf:message code="跳转到支付页面"/></h2></div><div class="box-body"><form id="order" name="order" action="${ ICBC.orderPostUrl}" method="post"><input type="hidden" name="interfaceName" value="${ICBC.interfaceName}" /> <input type="hidden" name="interfaceVersion" value="${ICBC.interfaceVersion}" /> <input type="hidden" name="tranData" value="${ ICBC.tranData}" /><input type="hidden" name="merSignMsg" value="${ ICBC.merSignMsg}" /><input type="hidden" name="merCert" value="${ICBC.merCert } " /></form><script type="text/javascript">document.getElementById("order").submit();</script></div></div>
</body>
</html>

注意orderDate!!!!没错,就是表单里那个订单时间!!!!!

你们八成会遇到这个错。。。96112025.。就是下面这样、、、、

你们别去看你们代码里时间对不对了,没有用!!为什么?因为工行测试环境的时间和本地时间!不!一!样!

知道原因了,打电话找银行吧。问问测试环境的时间是多少。

然后银行又发来一个获取测试环境时间的exe,如下:

用这个日期就没问题了,如果还报错,注意文档里写的

格式为:yyyyMMddHHmmss

目前要求在银行系统当前时间的前后十分钟范围内,否则判定交易时间非法。

好了,这些都搞定了。。。然后他喵的又报错。。

http://www.360doc.cn/article.aspx?id=146002674

这个是工商银行出错代码原因。96110445.。。。我不知道你们会不会报这个错。。。怎么都错,最后发邮件给银行,原来是他们系统的错误。。不是自己这边的问题。。so..有问题找银行~

这个错也搞定了,测试~发现可以进入页面了。

点下一步,又报错。。98001033.。。。

未完~~~~别走哈

工商银行B2C支付接口JAVA版(未完)相关推荐

  1. php对接工行h5支付,做过工商银行B2C支付接口开发的朋友来帮帮看看

    用工行给的demo做测试,但是总是报错: Warning: dl() [function.dl]: Not supported in multithreaded Web servers - use e ...

  2. nodejs调用建行互联网银企被扫支付接口Java版加解密Demo

    环境:nodejs+eclipse+child_process模块+建行互联网银企被扫支付接口文档V2.2.6 总体步骤如下: 1.将建行Java版加密Demo打包成jar包:CCBParam.jar ...

  3. 微信小程序开发(一)系统对接微信UGC类小程序内容安全接口JAVA版

    系统对接内容安全接口JAVA版 文章目录 系统对接内容安全接口JAVA版 前言 一.微信中UGC类小程序是什么? 二.微信内容安全接口是什么? 三.微信内容安全接口能干什么? 四.微信内容安全接口怎么 ...

  4. php 工商银行公众号支付代码_php实现工商银行在线支付接口

    php实现工商银行在线支付接口: 实现工商银行的在线支付功能,主要是根据工商银行提供的在线支付的接口,将订单中的数据以表单的形式提交到工行指定的网站中接口中,具体详细的参数设置可以参考工行提供的文档说 ...

  5. 接入支付宝电脑网站支付实现JAVA版

    简介 首先要说明的是个人感觉接入支付宝比微信简单多了,很轻松的,所以同学们不要紧张~ 当然还是老规矩啦,上来肯定的贴上官网地址,因为我这些服务天天在更新,而我的文章是教大家方法,而让你不是照葫芦画瓢 ...

  6. 接口基本概念(未完待续)

    举例:http://192.168.111.83:55999/demotest/logon.do 接口常见术语 IP(192.168.111.83):相当于具体地址,如国贸大厦 端口(55999):相 ...

  7. 联通SGIP1.2短信接口 Java版实现 总结 2013-10-23测试通过

    我的开发过程: 1:根据联通提供的SGIP接口文档,封装装协议. 2:编写通信流程 3:经理建议由原来的socket换成nio socket 4: 经理建议由原来的把Jar集成到需要调用的应用中变为 ...

  8. 微信/支付宝安卓端和苹果端支付集合 Java版

    如题, 这是一个经历过无数的坑后得到的支付集合的一个精华!(据说, 光是给外包项目接入第三方支付功能都能赚不少钱). 下面是流程 和 集合的工具类 该工具类,目前支持的功能有:APP(Android/ ...

  9. 工商银行EBank B2C支付接口v1.0.0.11 开发说明

    一.支付接口表单定义 新模式接口的交易数据整合到一个xml格式串,作为表单的一项整体提交,不再同原来每个字段都是key-value形式: FORM表单数据如下: 变量名称 变量命名 长度定义 说明 接 ...

  10. 微信第三方支付接口java调用详细文档

    1.显示支付二维码 支付流程 首先用户选好商品后 跳到结算页面 在点击支付提交时应先将表单的数据保存到数据库(一般都会有订单表一二级) 经过后台保存数据后再转发到前台(二维码是后台调用微信生成的) 看 ...

最新文章

  1. 1.8 简单的文件输入输出
  2. 一天搞定CSS: 浮动(float)的副作用--12
  3. HTTP常用头部信息
  4. CommonJS,AMD,CMD区别 - 郑星阳 - ITeye博客
  5. cpu只能单通道是什么表现_【小白入门】为什么要组内存双通道?
  6. spi总线 上层调用_spi总线设备驱动分析
  7. 数字滤波器(六)--设计FIR滤波器
  8. 微课|《Python编程基础与案例集锦(中学版)》第2章(1)
  9. 大数据与Hadoop有什么关系?大数据Hadoop入门简介
  10. 这就是XcodeGhost作者的原话
  11. 年薪50万的程序员_程序员年薪50万 ! 工资是不是太高了?
  12. JAVA工具类——身份证校验
  13. Python学习第一天
  14. IE无法上网,但其他浏览器可以
  15. 贺泓胜:2.24黄金今日走势分析操作建议,黄金原油解套指导
  16. 用Matlab实现猫变虎简单动画
  17. 微信小程序--JavaScript实现指定数字的精度输出
  18. 什么叫显示动力学,什么叫隐式动力学分析!
  19. 抖音显示服务器升级要多久,抖音服务器升级要多久才能恢复正常
  20. c语言:购房从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少月能还清。...

热门文章

  1. SketchUp2019下载SketchUp2019下载安装详细教程SU2019草图大师
  2. openwrt编译smartdns_【萌新理解交流】浅谈openWRT中的smartDNS中各个选项如何设置及其含义。...
  3. 西工大计算机专业研究生就业前景,2020考研34所院校就业情况解读:西北工业大学...
  4. R语言将两个矩阵数据进行相乘
  5. 软件项目经理应具备的素质和条件_项目经理应具备的素质与能力
  6. “蹲坑神器”与它背后男人们不得不说的故事
  7. matlab积分超过最大值,MATLAB 定积分上限是变量a,如何求解目标函数关于变量a的最大值?谢谢...
  8. CSS内联样式的使用,设置字体属性
  9. SpringBoot整合集成p6spy
  10. 手写原笔迹输入_原笔迹手写软件