{
auth: huangzhanglei/QQ3868277/xy_huangzhanglei@foxmail.com
date: 2015-05-04
comment: alipay 线下扫码支付接口动态库
alipay.dll加载后会自动从alipay.dll所在文件夹的alipay.ini读取proxy和printer参数
如参数需要保存到其他地方(例如数据库),
可调用alipay_proxy_conf、alipay_printer_conf重新设置相关参数
证书文件存放在cert文件夹下,根据pid自动加载
例如pid=2088123456789123,对应的文件:
跟证书:2088123456789123.pem
证书:2088123456789123.crt
密钥:2088123456789123.key
tips: 由于文件较多,最好将alipay.dll单独放置一个文件夹
warning: 1、libeay32.dll和ssleay32.dll不能使用aspack等工具压缩加密,否则部分win系统不能加载
2、正式发布时,请勿发布alipay.db,此文件alipay.dll会自动生成
programs: alipay_demo.exe支付宝调用示例
alipay_transview.exe交易查询工具
vposconf.exe打印配置程序,运行时选择alipay.ini
}
const
alipay_dll = 'alipay\alipay.dll';
//设置代理参数
procedure alipay_proxy_conf(
s_server: PAnsiChar; //服务器地址
l_port: ULONG; //端口
s_username: PAnsiChar; //用户
s_password: PAnsiChar //密码
);
stdcall; external alipay_dll;
//设置打印参数
procedure alipay_printer_conf(
s_port: PAnsiChar; //端口,prn/lptx/comx/usbx/net等,详见apputils.dll调用声明
s_option: PAnsiChar; //端口参数,使用com时设置波特率、校验位等
l_feedbefore: ULONG; //打印前卷纸
l_feedafter: ULONG //打印后卷纸
);
stdcall; external alipay_dll;
//交易付款
function alipay_pay(
s_pid: PAnsiChar; //partner id
s_key: PAnsiChar; //key
s_organ: PAnsiChar; //机构代码:4位数字
s_subject: PAnsiChar; //主题
l_amount: ULONG; //应付金额,单位为分,如5元,amount=500
var l_discount: ULONG //折扣金额:优惠券、红包
): PAnsiChar; //返回ORDER_SUCCESS_PAY_SUCCESS、TRADE_SUCCESS或TRADE_PENDING表示交易成功
stdcall; external alipay_dll;
//交易付款,pid、key、organ、subject参数直接从alipay.ini加载,其他参数及返回值同alipay_pay
function alipay_pay2(
l_amount: ULONG;
var l_discount: ULONG
): PAnsiChar;
stdcall; external alipay_dll;
//打印凭证
procedure alipay_print_vouch; stdcall; external alipay_dll;
//用户登录
procedure alipay_login(s_operid: PAnsiChar); stdcall; external alipay_dll;
//生成重打凭证,仅限未结算凭证
function alipay_reprint: BOOL; stdcall; external alipay_dll;
//结算
procedure alipay_total; stdcall; external alipay_dll;
procedure TForm1.FormCreate(Sender: TObject);
begin
//第一步,设置收银员账号
alipay_login('DEMO');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s_result_code: string;
amount, discount: ULONG;
begin
//第二步,交易
amount := Trunc(StrToFloat(MaskEdit1.Text) * 100);
s_result_code := alipay_pay2(amount, discount);
if (s_result_code = 'TRADE_SUCCESS') or (s_result_code = 'TRADE_PENDING') or (s_result_code = 'ORDER_SUCCESS_PAY_SUCCESS') then begin
//优惠金额记账....
ShowMessage('交易成功,准备打印凭证');
alipay_print_vouch;
end
else begin
ShowMessage('交易失败 : ' + s_result_code);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
//第三步,重打
if alipay_reprint then begin
alipay_print_vouch;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
//第四步,结算并打印
alipay_total;
alipay_print_vouch;
end;
评论11
最新资源