前段時間做銀行的支付介面,其中用到和支付寶新的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 生成簽名結果。最...