使用 Delphi 10.2 生成动态链接库,供Delphi6的项目使用
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdHTTP, IdIOHandler, IdIOHandlerSocket,
IdIOHandlerStack, IdSSL, IdSSLOpenSSL, Xml.xmldom, Xml.XMLIntf, Xml.XMLDoc,
System.Net.URLClient, System.Net.HttpClient, System.Net.HttpClientComponent,
Vcl.StdCtrls;
type
TForm1 = class(TForm)
IdHTTP1: TIdHTTP;
IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
XMLDocument1: TXMLDocument;
NetHTTPClient1: TNetHTTPClient;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Function WeiXinRefundPost(cert, key, Xml: PAnsichar): PAnsichar; stdcall;
// cert, key 是 微信证书.pem文件 的绝对路径,例如 D:\cert\apiclient_cert.pem
// Xml 是已经按照微信文档组合好的字符串
var
IdHTTP: TIdHTTP;
IdSSLIOHandlerSocketOpenSSL: TIdSSLIOHandlerSocketOpenSSL;
postStream: TStringStream;
str: Ansistring;
begin
IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
IdHTTP := TIdHTTP.Create();
IdHTTP.Request.ContentType := 'text/xml';
IdHTTP.Request.CharSet := 'UTF-8';
IdHTTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
// 加载微信支付商户平台颁发的证书文件
IdSSLIOHandlerSocketOpenSSL.SSLOptions.CertFile := string(cert);
// 加载微信支付商户平台颁发的密钥文件
IdSSLIOHandlerSocketOpenSSL.SSLOptions.KeyFile := string(key);
IdHTTP.HandleRedirects := True;
postStream := TStringStream.Create(Xml);
try
str := IdHTTP.Post('https://api.mch.weixin.qq.com/secapi/pay/refund',
postStream);
Result := PAnsichar(str);
finally
IdHTTP.Disconnect;
FreeAndNil(postStream);
end;
end;
Exports WeiXinRefundPost;
end.