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必須填寫,而且是http://開頭的絕對網絡地址,否則支付成功后,您將得不到狀態地址。

   ? 接口提交示例:

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=http://www.yousite.com/result.asp&P_Notify_URL=http://www.yousite.com/notify.asp

   ? 注意:因為P_Description參數要顯示在支付憑證中,所以建議使用GB2312編碼格式上傳。 或者使用urlencode編碼對此字段進行轉換。
參考地址:http://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

要退款的商戶平臺的訂單號

hmac

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. 注意事項

五个丝袜女榨精嗯啊哦哦视频