開發支付寶支付用DELPHI實現 RSA2簽名

2021-10-01 14:39:41 字數 1643 閱讀 7562

前段時間做銀行的支付介面,其中用到和支付寶新的rsa2一樣的簽名方法,網上的文章大多數都是用libeay32.pas封裝的openssl函式去實現的,在測試的時候無意發現裡面的函式和idsslopensslheaders裡面的基本是一致的,想到應該是新的indy也封裝了這些東西,研究了下,折騰了一天終於搞定了…

uses

idglobal, idsslopenssl, idsslopensslheaders, encddecd;

function sign(msg, keyfile: ansistring; zfj, jmfs: integer;

var signstr: ansistring): integer;

//zfj:字符集 0 utf8 1 gbk jmfs:加密方式 0rsa 1rsa2 2md5

var path: ansistring;

pkey: pevp_pkey;

bp, mbp: pbio;

md_ctx: evp_md_ctx;

buf: ansistring;

len: integer;

sigbuf: array [0 .. 4095] of ansichar;

siglen: integer;

inbuf: array [0 .. 1023] of ansichar;

begin

result := -1;

tryif (not fileexists(keyfile)) then

begin

result := -2;

exit;

end;

// 簽名 sign_type=rsa2 或rsa

buf := trim(msg);

if zfj = 0 then // 如果用utf-8請utf8編碼

buf := utf8encode(buf);

len := length(buf);

bp := bio_new_file(pansichar(keyfile), 'r'); // 載入私鑰

trypkey := pem_read_bio_privatekey(bp, nil, nil, nil);

finally

bio_free(bp);

end;

case jmfs of

0:evp_signinit(@md_ctx, evp_sha1); // 如果用rsa用 evp_sha1

1:evp_signinit(@md_ctx, evp_sha256); // 如果是rsa2用 evp_sha256

2:evp_signinit(@md_ctx, evp_md5); // 如果用md5用 evp_md5

end;

evp_signupdate(@md_ctx, pansichar(buf), len);

evp_signfinal(@md_ctx, @sigbuf, @siglen, pkey);

signstr := encodebase64(@sigbuf, siglen);

result := 0;

except

on e: exception do

result := -3;

end;

end;

支付寶轉帳 Delphi

最近研究了一下支付寶轉帳,查了一下支付寶開發放台官網,發現已經有了對應的介面,開發方式與前期寫的支付寶當面付sdk差不多,只是在其基礎上加了二個介面 alipay.fund.trans.toaccount.transfer 單筆轉賬到支付寶賬戶介面 單筆轉賬到支付寶賬戶介面是基於支付寶的資金處理能力...

支付寶支付介面開發

1.簡單點說就是呼叫支付寶那邊的介面方法,然後傳遞資料過去,之後會返回乙個是否成功的值,然後你拿到之後判斷就好了 流程說明 以android平台為例 第4步 呼叫支付介面 此訊息就是本介面所描述的開發包提供的支付物件paytask,將商戶簽名後的訂單資訊傳進pay方法喚起支付寶收銀台,訂單格式具體參...

支付寶支付

1 呼叫支付寶介面 具體 i 呼叫alipaysubmit.buildrequestpara 方法生成要請求給支付寶的引數陣列。呼叫alipaycore.parafilter sparatemp 除去陣列中的空值和簽名引數。之後,呼叫buildrequestmysign spara 生成簽名結果。最...