NAVNavbar
Java PHP C# Python Node.js Go Ruby Android Objective-C

公益报中华彩票:接入指引

一、用户注册登录

用户首先需完成 用户注册
已注册商户可以直接 商户登录
已注册渠道可以直接 渠道登录

1.引言

更新时间

更新内容

版本号

2017.11.1

新增退款接口

2.1.7

2018.1.15

修改了部分错误,修正了部分文字描述

2.1.8

1.1 文档说明

一、订单规范

  本文件是i聚合为商户接入i聚合支付平台,提供的解决方案。

  供内部开发人员或者与平台服务方技术相关的人员参考使用。

  文档从交互模式,签名,注意事项等方面对i聚合平台的对接,做了相关的说明和工作模式。

1.2 阅读对象

  供商户开发人员与商户平台服务方技术或业务人员参考和查询。

1.3 测试数据

  测试公众号的openid请关注“i聚合支付”发送openid,识别图片获得。

测试商户号

测试秘钥

公众号APPID

扫码appid

1635

0iUvmz8xXckxLD7NMFr9eXlBMvnYJNqo

wx15100945b8d2b322

微信:1

1635

0iUvmz8xXckxLD7NMFr9eXlBMvnYJNqo

wx15100945b8d2b322

支付宝: 2

1.4 支付流程

          

1.5 加密安全

  平台数据统一使用 md5_32进行初级加密,数据在i聚合平台会进行二次加密并上传相关通道,保证服务商户数据在平台的安全和数据的完整。

2. 统一网关支付接口规范

2.1 网关地址

  网关地址:https://ijuhepay.cn/GateWay/ReceiveOrder.aspx

2.2上传网关参数

参数

参数说明

参与签名

类型

备注

P_UserId

商户ID

整形数字

必须(由i聚合平台提供)

P_OrderId

商户订单号

字符串,最长32位

必须,在商户系统中保持唯一

P_CardId

卡号

字符串,最长20位

1.代付请填写出金银行卡号????
?2.微信wap请填写应用类型
?否则可为空

P_CardPass

卡密

字符串,最长20位

卡类业务时必须,否则可为空

P_FaceValue

面值

float,保留2位小数

必须(实际价格)

P_Price

代付金额

float,保留2位小数

必须,可传0(价格标签)

P_FaceType

币种

字符串,最长3位

固定值CNY

P_ChannelId

支付类型

整型数字

必须(支付类型)

P_Subject

名称

字符串,最常20位

代付请填写用户姓名???
???否则可为空

P_Quantity

产品数量

字符串,最长100位

必须?通常为“1”

P_Description

产品描述

字符串,最长100位

为方便查单,建议为空(此参数内容会显示在支付凭证中)

P_Notic

用户附加信息

字符串,最长50位

微信WAP请填写应用名称

P_Result_URL

支付状态通知地址

字符串,最长100位

必须异步通知地址

P_Notify_URL

支付后网页跳转地址

字符串,最长100位

可为空(跳回)同步

P_PostKey

签名认证串

字符串

必须

P_APPID?????(或最终支付网址)

申请提交的appid

字符串,最长100位

必须(扫码,wap用户请填写最终支付网址)

P_OpenID

openid

字符串,最长128位

1.公众号、APP对接时需要,为必填项???2.?微信WAP请填写应用标识

2.3 提交网关验签说明


<!--
 引入头文件:
import
 com.umf.api.service.UmfService
 ;
import 
com.umf.api.service.UmfServiceImpl
;
-->
*************
调用示例
****************
//初始化UmfService类,传入商户号和商户私钥路径 
UmfService
 instance 
= 
new 
UmfServiceImpl
("60000100"
,"G:/60000100_.key.p8"
);


//增加商户私钥保存方法            
Map 
reqMap 
= 
prepareSaveCertMap
();                      
public 
static 
Map 
prepareSaveCertMap(){
Map 
reqMap 
= 
new 
HashMap
();
reqMap
.
put
(
"60000102.mer.prikey.path"
,
"G:/60000102_.key.p8"
); 
//传入私钥名(商户号.mer.prikey.path)和路径 
return 
reqMap
;
}
service.
addMerPrivateCertMap
(reqMap
);   
/**
 * 增加商户私钥保存方法
 */
public void test_addMerPrivateCertMap(){
    UmfService service = new UmfService();
    Hashtable ht = new Hashtable() {
         { "60000100",@"D:\cert\60000100_.key.der" }
    };
    service.addMerPrivateCertMap(ht);
}
import os

import umfpayservice
import umf_service_test

umfpayservice.umf_config.set_log_path('./logs')
umfpayservice.umf_config.add_private_keys([('60000100', 'G:/60000100_.key.pem'), ])
try:
    umf_service_test.test_reconciliation_download()
except Exception as e:
print(e.message)
var umfUtil = require('../utils/UmfUtils')
var service = require('../service/umfService')
var testMer2Umf = new TestMer2Umf()
var umfService = new service()
var umfService1 = new service()
umfService.umfService("60000100", "G:/60000100_.key.pem")
umfService1.umfService("60000101", "G:/60000101_.key.pem")
//Go代码示例
var (
    mer_id, privateKey = "60000100", GetKey("D:/key/60000100_.key.pem")
    //mer_id,privateKey ="60038402_", GetKey("D:/key/60038402_.key.pem")
)
//Ruby代码示例
 def test_addMerPrivateCertMap
    UmfService.addMerPrivateCertMap("60000100","C:/60000100_.key.pem")
    UmfService.addMerPrivateCertMap("60038402","C:/60038402_.key.pem")
    puts $privateKeyPath
 end
   ? 签名认证postKey的生成:必须按照“参与签名”状态为“是”的参数按其顺序用“|”组合,最后加上用户密钥,然后进行32位的md5编码,

   如:P_PostKey=md5_32(P_UserId| P_OrderId| P_CardId| P_CardPass |P_FaceValue| P_FaceType| P_ChannelId|SalfStr)

   SalfStr是您在设置信息的时候,填写的安全码(如何获取安全码?登录商户平台,接口配置-->支付通道接口下载-->密钥,这里自己设置安全密钥)

   ? Result_URL必须填写,而且是//开头的绝对网络地址,否则支付成功后,您将得不到状态地址。

   ? 接口提交示例:

https://ijuhepay.cn/GateWay/ReceiveOrder.aspx?P_UserId=2000&P_OrderId=90898089890we8r098erewr&P_CardId=S0989899809342343443&P_CardPass=908932849
&P_FaceValue=10.00&P_FaceType=CNY&P_ChannelId=3&P_Subject=MyPay&P_Price=10.00&P_Quantity
=1&P_Description=MyPay&P_Notic=sometext&P_PostKey=SDFS098KLJLKSJDFSKLJLKKLSF&P_AppID=
wxxxxxxxxxxxxx&P_Result_url=//www.yousite.com/result.asp&P_Notify_URL=//www.yousite.com/notify.asp

   ? 注意:因为P_Description参数要显示在支付凭证中,所以建议使用GB2312编码格式上传。 或者使用urlencode编码对此字段进行转换。
参考地址://blog.csdn.net/w938706428/article/details/45076003

3. 同步异步参数

  支付状态回调:用户通过本平台网关支付后,本平台接收到支付报告状态时,立即向您在提交网关参数中的P_Result_URL(支付状态回调地址)
  传递支付报告,您根据这个支付报告的状态,决定是否给用户服务;

3.1 异步参数规范

参数

参数说明

参与签名

类型

备注

P_UserId

商户ID

整型数字

商户在平台的商户号

P_OrderId

商户订单号

字符串,最长32位

商户自己定义的订单号

P_CardId

卡类充值时的卡号

字符串,最长20位

返回上传的值

P_CardPass

卡类充值时的卡密

字符串,最长20位

返回上传的值

P_FaceValue

面值

float,保留2位小数

返回上传的值

P_ChannelId

支付银行类型

字符串

银行返回

P_OrderId_out

平台订单号

字符串,最长32位

平台返回平台订单号

P_PayMoney

充值的产品金额

float,保留2位小数

返回上传的值

P_Subject

产品名称

字符串,最常20位

返回上传的值

P_Price

产品价格

float,保留2位小数

返回上传的值

P_Quantity

产品数量

整型数字

返回上传的值

P_Descripton

产品描述

字符串,最常100位

返回上传的值

P_Notic

用户附加信息

字符串,最常50位

返回上传的值

P_ErrCode

错误代码

整型数字

返回信息(信息代码详见附录

P_ErrMsg

错误描述

字符串

报错信息描述

P_PostKey

签名认证串

字符串

Md5加密签

3.2 回调验签说明

//java代码示例
public static void runOneQuickPayGetSMSDemo(){
    //模拟一键支付获取短信请求参数
    Map reqMap = prepareGetSmsMap();
    Map respMap = MerCallServiceSingleton.getInstancei().getSMSMap(reqMap);
    printResult(respMap);
}
    //一键支付获取短信请求参数
public static Map prepareGetSmsMap(){
    Map reqMap = new HashMap();
    reqMap.put("mer_id",mer_id);  
    reqMap.put("trade_no","3801261003248915");
    reqMap.put("media_id","13333333333");
    reqMap.put("amount","1");
    return reqMap;
}
   ? 签名认证postKey的生成:必须按照“参与签名”状态为“是”的参数按其顺序用“|”组合,最后加上用户密钥,然后进行32位的md5编码,

   比如:P_PostKey=md5_32(P_UserId| P_OrderId| P_CardId| P_CardPass| P_FaceValue| P_ChannelId| P_OrderId_out |SalfStr),

   SalfStr是商户后台的秘钥,填写的秘钥。

   ? P_ErrCode=0表示支付成功。

   ? 通过后台接收返回时,接收到数据后,请返回errCode=0,不要其它任何字符及html代码。

   ? 回调参数以key=value的形式下发给客户。

   ? 在对接的时候,接收到异步通知,验签成功后在修改订单状态,防止恶意刷单。

3.3 同步参数列表

参数

参数说明

参与签名

类型

备注

P_UserId

商户ID

整型数字

商户在平台的商户号

P_OrderId

商户订单号

字符串,最长32位

返回上传的值

P_FaceValue

面值

float,保留2位小数

返回上传的值

P_ChannelId

支付银行类型

字符串

返回上传的值

P_OrderId_out

平台订单号

字符串,最长32位

平台返回平台订单号

P_PayMoney

充值的产品金额

float,保留2位小数

返回上传的值

P_Subject

产品名称

字符串,最常20位

返回上传的值

4 补单机制

   补单,是指订单实际已经支付成功,但是由于各方面原因,系统没有收到订单成功返回或返回超时,

   i聚合平台判定失败并下发通知,在订单状态显示失败。因为此订单是成功订单,不影响商户资金结算。i聚合平台管理员,

   确认此单真实有效后,可将该订单由失败状态修改为成功状态并重新下发,即补单。

5. 附录

5.1 错误代码

错误码

错误原因

0

提交或者是支付成功

-1

微信签名或包名错误,appid未注册等原因

-2

用户取消支付

处理失败2

链接通道失败,检查appid,秘钥等原因

非法子商户号

一般为appid没成功绑定或绑定出现问题

sub_mch_id与sub_appid不匹配

可能appid未完成微信认证

110|加密串postKey错误

加密错误,请严格按照加密样式进行加密

受理机构必须传入sub_mch_id

受理机构传入值错误(一般为银行方面问题)

未创建应用或应用未开通

请检查是否绑定了应用或者开通了商户号,或者相关数据是否正确

113

未开通此通道或者业务

199

同步跳转

5.2 支付类型

1000

扫码支付

1010

微信APP

1020

微信公众号

1030

手机网页

6. 对接详情

6.1 公众号

6.1.1 公众号demo体验

   请关注:i聚合 或者 i聚合支付(微信号:ijuhe-pay),或者扫一扫下面二维码,进入公众号内,点击支付体验菜单进行测试

          

6.1.2 开发

   商户在自己微信公众号H5商城中,集成微信支付功能。用户通过关注公众号,使用公众号完成下单支付的流程。

6.1.3 提交参数见网关规范

   Appid为申请支付时提交的appid。Openid需客户根据官方文档自行获取。

   参考文档连接:https://pay.weixin.qq.com/wiki/doc/api/index.html

   参考文档连接:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

   按照文档上传后平台会返回如下参数:

https://ijuhepay.cn/GateWay/ReceiveOrder.aspx?P_UserId=1635&P_OrderId=i20170526100341170305&P_CardId=&P_CardPass=&P_FaceValue=0.01&P_ChannelId=1000&P_Subject=GamePay&P_Price=1&P_Quantit
y=1&P_Description=GamePay&P_Notic=parmas&P_AppID=wx15100945b8d2b322&P_Result_url=异步通知地址&P_Notify_url=成功跳转地址&P_PostKey=d30b4411040788815e260528562362f4&P_OpenID=获取到的openid
商户接收支付链接然后跳转这个地址就可以调起支付页。 也可返回json,商户根据官方文档自行调起支付https://pay.weixin.qq.com/wiki/doc/api/jsapi_sl.php?chapter=7_7&index=6。

6.2扫码支付

  扫码提交参数以及加密方式见统一网关规范

  唯一网址请填写支付申请的唯一网址,否则系统无法判断您的业务。

  提交成功后系统直接返回二维码页面或者字符串

6.3 微信app支付

提交参数以及加密方式请参考统一网关规范

上传参数后平台会下一个json {"appid":"商户提交审核上传的Appid","partnerid":"31531796","prepayid":"wx20170623100942872d3c50c80912354355","timestamp":"1498183782","noncestr":"201706231009421498183782493285","package":"Sign=WXPay","sign":"3D15F4FA3E7B49A1B1CBD34F7623F648"}

商户根据下发的json自行调起支付 参考文档:

https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5 https://pay.weixin.qq.com/wiki/doc/api/jsapi_sl.php?chapter=7_7&index=6
Sdk : https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1

6.4 WAP支付



6.4.1 QQWAP支付

参照扫码支付提交参数后平台会返回支付调起连接 示例如下:

https://myun.tenpay.com/mqq/pay/index.shtml?t=5V25dd4d61fafc95ad4240a8cd8be6d8
打开这个支付既调起支付

6.4.2 微信WAP支付

由于微信wap比较特殊,需要上传需要上传应用类型,应用名称,应用标识等。

详情如下:

1.应用类型:

如果是用于苹果 app 应用里值为 iOS_SDK;如 果是用于安卓 app 应用里值为 AND_SDK;如果 是用于手机网站,值为 iOS_WAP 或 AND_WAP 均可。

2.应用名称:

WAP请填写应用名如果是用于苹果或安卓 app 应用中,传分别 对应在 AppStore 和安桌分发市场中的应用名 (如:王者荣耀)

3.应用标识:

WAP时请填写应用标识 (苹果传 IOS 应 用 唯 一 标 识 ( 如 : com.tencent.wzryIOS) 安卓传包名(如:com.tencent.tmgp.sgame) 如果是用于手机网站,传网站首页 URL 地址, 必 须 保 证 公 网 能 正 常 访 问 ( 如 : https://m.jd.com))

返回参数如下:

ttps://statecheck.swiftpass.cn/pay/wappay?token_id=29d0a92af3bdbbde57b18bb3b42801cc8&service=pay.weixin.wappayv2

7.订单状态查询

WAP时请填写应用标识 (苹果传 IOS 应 用 唯 一 标 识 ( 如 : com.tencent.wzryIOS) 安卓传包名(如:com.tencent.tmgp.sgame) 如果是用于手机网站,传网站首页 URL 地址, 必 须 保 证 公 网 能 正 常 访 问 ( 如 : https://m.jd.com))

订单查询接口提交参数:

参数名称

参数名称

是否必填

参数长度

参数说明

p0_Cmd

业务类型

20

固定值“QueryOrdDetail”

p1_MerId

商户编号

11

商户在平台的商户号

p2_Order

商户订单号

50

商户平台的订单号

hmac

Md5

 

 

加密后的数据

数据加密:hmac=p0_Cmd+p1_MerId+p2_Order+商户秘钥

加密示例:

加密前:

QueryOrdDetail1635i20170731042858209869pSHPKEKeYpR8UwKzG2mB6tphO3AEtwSy

加密后:

加密前:


提交参数示例:

https://ijuhepay.cn/GateWay/ReceiveOrderSelect.aspx?p0_Cmd=QueryOrdDetail&p1_MerId=1635&p2_Order=i20170731042858209869&hmac=e9a1c4effbc5b5bae4d139e41eb7cf70

平台返回参数如下:

参数名称

参数名称

参数长度

参数说明

r0_Cmd

支付结果

 

固定值“QueryOrdDetail”

r1_Code

平台交易号

50

“1”, 代表支付成功.
“0”,提交参数错误
“10”,签名错误
“11”,商户未开通
“50”,订单不存在

r2_TrxId

交易流水号

50

平台产生的交易流水号,每笔订单唯一

r3_Amt

支付金额

20

单位:元,精确到分. 商户收到该返回数据后,一定用自己数据库中存储的金额与该金额进行比较

r4_Cur

交易币种

10

返回时是“RMB”

r5_Pid

商品名称

20

返回商户设置的商品名称.
此参数如用到中文,请注意转码

r6_Order

商户订单号

50

返回商户订单号

r8_MP

商户扩展信息

20

此参数如用到中文,请注意转码

rb_PayStatus

支付状态

10

为“SUCCESS”: 支付成功;
? 为“INIT”: 未支付.

hmac

MD5

 

加密后的值

加密参数示例:

加密前:

md5=QueryOrdDetail+r1_Code+r2_TrxId+r3_Amt+?r4_Cur+r5_Pid+r6_Order+?r8_MP+rb_PayStatus+商户秘钥

加密前:

hmac=e831ed1dffde5d4ae5d2e571b13cdc3b

平台返回json如下::

{"r0_Cmd":"QueryOrdDetail","r1_Code":"1","r2_TrxId":"201707311628589355","r3_Amt":"0.10","r4_Cur":"RMB","r5_Pid":"","r6_Order":"i20170731042858209869","r8_MP":"","rb_PayStatus":"SUCCESS","hmac":"e831ed1dffde5d4ae5d2e571b13cdc3b"}

8.退款接口

请求地址:https://ijuhepay.cn/GateWay/ReceiveOrderRefund.asp

请求参数如下:

参数名称

参数名称

是否必填

参数长度

参数说明

p0_Cmd

业务类型

20

固定值“RefundOrdDetail”

p1_MerchantId

商户编号

11

商户在平台的商户号

p2_UsrOrderId

商户订单号

50

要退款的商户平台的订单号

中华彩票公益时报

MD5

 

 

加密后的数据

数据加密:hmac=p0_Cmd+p1_MerchantId+p2_UsrOrderId+商户秘钥

加密示例:

加密前:

RefundOrdDetail1635i201711020209571170550iUvmz8xXckxLD7NMFr9eXlBMvnYJNqo

加密后:

cc65c6da74969545839309e2e65511b9

提交连接示例

_MerchantId=1635&p2_UsrOrderId=i20171102020957117055&hmac=cc65c6da74969545839309e2e65511b9

返回参数

参数名称

参数名称

参数长度

参数说明

r0_Cmd

业务类型

_____

固定值“RefundOrdDetail”

r1_Code

提交结果

50

“success”, 代表退款申请成功.
“fail”,代表退款申请失败.
? “0”,提交参数错误.
“10”,签名错误.
“11”,商户未开通.
“50”,订单不存在(只有支付成功的订单才支持退款操作)

r2_OrderId

交易流水号

50

平台产生的交易流水号,每笔订单唯一

r3_Money

支付金额

20

单位:元,精确到分. 商户收到该返回数据后,一定用自己数据库中存储的金额与该金额进行比较

r4_PayType

交易币种

10

返回时是“RMB”

r6_UsrOrderId

商户订单号

50

返回商户订单号

r7_Msg

返回信息

20

提交信息(不参与签名)

hmac

MD5

 

加密后的值

返回结果示例

{"r0_Cmd":"RefundOrdDetail","r1_Code":"success","r2_OrderId":"201711021409569421","r3_Money":"0.01","r4_PayType":"RMB","r6_UsrOrderId":"i20171102020957117055","r7_Msg":"提交退款申请成功,请查看处理结果!","hmac":"ba1764bb3ac7a1eb5efc94f348ff93a5"}

9. 注意事项

  • 宝玉抓周与“标签效应”:孩子不成器从小就知道? 2018-11-15
  • 201家企业(单位)存在环境问题 2018-11-15
  • 反制更快更强更准!中国坚决打赢对美贸易自卫反击战! 2018-11-14
  • COOME亮相纽约时装周 将正式进入中国市场 2018-11-13
  • 人工智能开发出“穿墙看人”新技术 2018-11-13
  • 端午将至,你闻到粽香了吗? 2018-11-12
  • 杭州退役女狙击手爱上摩旅 曾“单骑”出国游老挝 2018-11-12
  • 和平安全的基石 共同繁荣的纽带——国际社会高度评价上合组织促稳定谋发展 2018-11-11
  • 有说道他们那就是他们的“政治正确”,借着这个“政治正确”由头起事。 2018-11-11
  • 特别是现在,到处是荒田,到处是改做他用的土地农民依然养活了全国人民,还能抽出时间去打工,中国农民是一只神的部队。是天兵天降 2018-11-10
  • 吴青峰携手年度古装剧《扶摇》 首度创作并献唱主题曲扶摇 吴青峰 2018-11-10
  • 端午——网络中国节——黄河新闻网 2018-11-09
  • 尴尬!首发大名单错将小马哥队名写成“河北华北” 2018-11-08
  • 备孕体检孕前三个月最佳 2018-11-07
  • 钟山文艺讲坛许结的辞赋学是无心插柳柳成荫 2018-11-06
  • 735| 352| 11| 15| 977| 695| 815| 487| 643| 285|