易宝迁移重构(T3PLUS)


接入

<h3>接入描述</h3> <p>支付请求采用HTTP/HTTPS协议,用户需以POST方式传输给支付中心系统(以下简称支付中心); 支付中心使用的编码方式为:UTF-8; 请严格依照参数规范设置参数,切勿遗漏“必填”参数,注意大小写区分; 建议商户保留以下信息:签名信息、传输参数。</p> <h3>安全策略</h3> <p>商户发起交易需指定服务器IP,我方支付平台进行白名单安全组授权; 交易进行MD5签名处理; 交易报文已密文形式交互。</p> <h3>vbao请求接口Sign计算方式(签名)</h3> <p>请求参数按照参数名字符升序排列,如果有重复参数名,那么重复的参数再按照参数值的字符升序排列。 所有参数(除了sign和signtype以及参数为空的参数)按照上面的排序用&amp;连接起来,格式是:p1=v1&amp;p2=v2。 (1) 待签名串: Origin= (2) 签名方式: MD5方式:Sign =md5(Origin+md5key)32位大写 9.接口中所有涉及金额的地方都以 分 为单位。</p> <h3>众诚请求接口Sign计算方式(签名)</h3> <h4>拼接规则</h4> <p>无论是请求还是应答,签名原始串按以下方式组装成字符串: 1、除 sign 字段外,所有参数按照字段名的 ascii 码从小到大排序后使用 Querystring 的格式(即 key1=value1&amp;key2=value2…)拼接而成,空值不参与签名组串。 2、签名原始串中,字段名和字段值都采用原始值,不进行 URL Encode。 3、平台返回的应答或通知消息可能会由于升级增加参数,请验证应答签名时注意允许这种情况。</p> <h4>拼接示例</h4> <p>使用请求参数中 data 的内容+&amp;key={key}作为签名串,如: channels_info={&quot;trade_no&quot;:&quot;123456789&quot;}&amp;nonce_str=123456789&amp;out_trade_no=123456789&amp;partner_id=utic_test&amp; pay_type=01&amp;result_code=SUCCESS&amp;return_code=1&amp;service=pay.alipay.jspay&amp;key=test1234</p> <h4>生成签名</h4> <p>使用 md5 算法加密 32 位进行签名,签名串字母为全部小写, 提供 JAVA 加密代码如下,其他语言开发可按要求正确加密即可。 Md5PasswordEncoder md5 = new Md5PasswordEncoder(); md5.setEncodeHashAsBase64(false); string md5token = md5.encodePassword(md5string, null);</p> <h3>易宝标准接口验签</h3> <h4>3.1、报文基本格式为  </h4> <p>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</p> <COD-MS>          <SessionHead>          ···         <HMAC>1234</HMAC>        </SessionHead>        <SessionBody>         ···        </SessionBody> </COD-MS> 3.2、将报文 <SessionHead>到  </SessionBody>的报文、去除空格、去掉节点  <HMAC>1234</HMAC> ,在末尾加上 秘钥 secretKey,计算MD5 3.3、参考代码:   使用 commons-codec (https://mvnrepository.com/artifact/commons-codec/commons-codec/1.10) 的工具方法,计算 MD5(basicXml+secretKey)   ```java  /**      * 和商户交互的hmac的统一计算方法      * @param basicXml   基本xml字符串 不包含 <HMAC>1234</HMAC> 节点内容      * @param secretKey  参与加密的key      * @return      */     private static String gethmac(String basicXml,String secretKey) {     //根据规则去除 <COD-MS></COD-MS>     basicXml=basicXml.substring(basicXml.indexOf("<SessionHead>"), basicXml.indexOf("</COD-MS>"));     //去除所有空格     basicXml=basicXml.replaceAll(" ", "");     //使用 commons-codec (https://mvnrepository.com/artifact/commons-codec/commons-codec/1.10) 的工具方法,计算 MD5(basicXml+secretKey)       //System.out.println("str=="+basicXml+secretKey);     return DigestUtils.md5Hex(basicXml+secretKey);     } ``` ### 加解密说明 加密过程: 一、对原始报文字符串xml进行编码为UTF-8的Base64加密,得到UTF-8编码的字符串str1; 二、对原始报文字符串xml进行编码为UTF-8的哈希SHA1算法加密,得到UTF-8编码的字符串str2; 三、将步骤(二)得到的字符串str2和步骤(一)得到的字符串str1拼接(即str3 = str2+ str1,注意顺序),对拼接后的字符串str3再次进行编码为UTF-8的Base64加密,得到UTF-8编码的最终加密字符串值。 解密过程: 一、对接收到的返回报文字符串returnXml先进行编码为UTF-8的Base64解密,得到字符串returnXml1。 二、对解密后的字符串returnXml1从第40位开始截取到末尾长度得到字符串returnXml2。 三、对截取后的字符串returnXml2进行编码为UTF-8的Base64解密,得到明文返回字符串。

页面列表

ITEM_HTML