gmc銀聯接口開發demo


1、接口文檔

1.1 無gmc界面接口 (dll/ocx)

dll調用(posinf.dll)函數名為:int bankall (char * request,char *response),其中第一個參數為傳入參數。

ocx調用(umsocx.ocx)trans(),傳入參數為:bankrequest

請求參數格式說明如下:

內容

格式

長度

描述

POS機號

ANS

8

不足右補空格

POS員工號

ANS

8

不足右補空格

交易類型標志

N

2

'00'-消費        '01'-撤消

'02'-退貨        '03'-查余額

'04'-重打印      '05'-簽到

'06'-結算        '07'-重打結算單

'08'-全民付()   '55'-換班統計

72''78':全民付類交易

'10'-積分消費        '11'-積分撤消

'12'-分期消費        '13'-分期撤銷

'21'-預授權         '23'-預授權完成請求

'24'-預授權完成通知  '25'-預授權撤銷

'26'-預授權完成撤銷  '27'-離線結算

'28'-結算調整

金額

N

12

信用卡消費金額,char(12),沒有小數點".",精確到分,最后兩位為小數位,不足左補0。

原交易日期

N

8

yyyymmdd格式,退貨時用,其他交易空格

原交易參考號

N

12

退貨時用,其他交易空格

原憑證號

N

6

撤消時用,其他交易空格

LRC校驗

ANS

3

3位隨機數字

全民付(行業信息)

N

100

行業信息(非全民付類交易無需送此項)(全民付類不送此項,則為鍵盤輸入)

 

dll調用(posinf.dll)函數名為:int bankall (char * request,char *response),其中第二個參數為應答參數。

ocx調用函數名為:trans(),傳入參數為:BankResponse

應答參數格式說明如下:

內容

格式

長度

描   述

返回碼

N

2

00 表示成功,其它表示失敗

銀行行號

N

4

發卡行代碼

卡號

N

20

卡號(屏蔽部分,保留前64

憑證號

N

6

 

金額

N

12

 

錯誤說明

ANS

40

中文解釋

商戶號

N

15

 

終端號

N

8

 

批次號

N

6

 

交易日期

N

4

 

交易時間

N

6

 

交易參考號

N

12

 

授權號

N

6

 

清算日期

N

4

 

LRC校驗

ANS

3

三位數字,應該和請求一致

1.2 符號定義

數據元類型如下所列:

00001—— A 字母向左靠,右部多余部分填空格。

00002—— AN 字母和/或數字,左靠,右部多余部分填空格。

00003—— ANS 字母、數字和/或特殊符號,左靠,右部多余部分填空格。

00004—— N 數值,右靠,首位有效數字前充零。若表示金額,則最右二位為角分。

00005—— MM 月。

00006—— DD 日。

00007—— hh 時。

00008—— mm 分。

00009—— ss 秒。

注意:本接口文檔中信息交換數據,均為定長,注意按照要求補足空格。

2、代碼實現如下:

//外部函數聲明
FUNCTION long bankall(string as_request, ref string as_response) LIBRARY "posinf.dll"


//調用
string    ls_content,ls_sellway,ls_money,ls_OldDate
string   ls_posid,ls_casher,ls_rand
dec{2}   ldec_needpay, ldec_pay,ldec_consume
dec{2}   ldec_cnt,ldec_payed
string    ls_cardid,ls_voucher,ls_consume
string    ls_info,ls_refno,ls_OldRefno,ls_OldVoucher

//'00'-消費'01'-撤消'02'-退貨'03'-查余額'04'-重打印'05'-簽到'06'-結算'07'-重打結算單
ls_sellway=left(sle_type.text,2)
if pos('00/01/02/03/04/05/06/07',ls_sellway)=0 then 
    messagebox('提示','請錄入正確的交易類型!')
    sle_type.setfocus()
    sle_type.selecttext(1,len(sle_type.text))
    return
end if

///交易金額
if ls_sellway='00' or ls_sellway='01' or ls_sellway='02' then 
    //'00'-消費'01'-撤消'02'-退貨
    ldec_needpay=abs(dec(sle_payamt.text))
    if ldec_needpay=0 or (not IsNumber(sle_payamt.text)) then
        messagebox('提示','請錄入金額!')
        sle_payamt.setfocus()
        sle_payamt.selecttext(1,len(sle_payamt.text))
        return
    end if      
else
    ldec_needpay=0
end if

//'02'-退貨//原交易日期、原交易參考號    
if ls_sellway='02' then 
    ls_OldDate=trim(sle_date.text)
    if isnull(ls_OldDate) or ls_OldDate='' or len(ls_OldDate)<>8 then 
        messagebox('提示','請錄入原交易日期(8位),格式為yyyymmdd!')
        sle_date.setfocus()
        sle_date.selecttext(1,len(sle_date.text))
        return
    end if
    
    ls_OldRefno=trim(sle_refno.text)
    if isnull(ls_OldRefno) or ls_OldRefno='' or len(ls_OldRefno)<>12 then 
        messagebox('提示','請錄入原交易參考號(12位)!')
        sle_refno.setfocus()
        sle_refno.selecttext(1,len(sle_date.text))
        return
    end if
    
else
    ls_OldDate=space(8)
    ls_OldRefno=space(12)
end if

//'01'-撤消//原憑證號
if ls_sellway='01' then 
    ls_OldVoucher=trim(sle_voucher.text)
    if isnull(ls_OldVoucher) or ls_OldVoucher='' or len(ls_OldVoucher)<>6 then 
        messagebox('提示','請錄入原憑證號(6位)!')
        sle_voucher.setfocus()
        sle_voucher.selecttext(1,len(sle_date.text))
        return
    end if
else
    ls_OldVoucher=space(6)
end if

ls_posid='99'
ls_casher='1001'
ls_money=string(round(ldec_needpay,2)*100,'000000000000')
ls_rand=string(rand(999),'000') ///3位隨機數字
//傳給銀行卡刷卡系統的交易請求文件:
//POS機號(8位,不足右補空格)+POS員工號(8位,不足右補空格)+交易類型標志(2位)+金額(12位,不足左補0)+
//原交易日期(8位,yyyymmdd格式,退貨時用,其他交易空格)
//原交易參考號(12位,退貨時用,其他交易空格)
//原憑證號(6位,撤消時用,其他交易空格)
//備用(000000)+LRC(3位隨機數字)
ls_content=ls_posid+space(8 - len(ls_posid)) +ls_casher+space(8 - len(ls_casher)) +ls_sellway+ls_money+&
+ls_OldDate+ls_OldRefno+ls_OldVoucher+'000000'+ls_rand

ls_info=space(300)
bankall(ls_content,ls_info)

if left(ls_info,2)='00' then     //響應碼2位, 00 表示成功,其它表示失敗
    ls_cardid =mid(ls_info,7,20)  //卡號20位    
    ls_voucher=mid(ls_info,27,6)   //憑證號6位
    ls_consume=mid(ls_info,33,12)  //金額12位    
    ls_refno  =mid(ls_info,124,12)  //交易參考號12
    messagebox('提示',"交易成功,金額為"+string(dec(ls_consume)/100)+",~r~n憑證號是:"+ls_voucher+",交易參考號是:"+ls_refno)
else
    messagebox('提示',"交易失敗,返回值:"+left(ls_info,2)+",失敗原因:"+mid(ls_info,45,40))
    return 
end if

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM