DELPHI移动端支付宝支付
Delphi XE7 Android
应用接入支付宝SDK的方法
1 应用场景和准备工作:
- 采用XE系列开发的android apps。
- apps中需要集成支付宝的支付能力。
- 支付到指定的商家(一般就是软件开发商自己啦),商家需要事先在支付宝的开放平台申请开通【支付宝无线快捷支付】,具体请百度。
- 开通【无线快捷支付】后,支付宝应该返回给商家如下几个重要参数:
l PARTNER(商户ID): 一个16为的字符串,应该都是数字。
l SELLER(商户名):多数是商户的邮件地址。
l RSA_PRIVATE(商户私钥 ): 一个848位的字符串,采用pkcs8编码过。
l RSA_PRIVATE(商户私钥 ): 一个848位的字符串。
l RSA_PUBLIC(商户公钥):一个218位的经过pkcs8编码的字符串。这个公钥并没有用到,是支付宝后台用的。
- 5. 以上几个参数,都是支付宝再审核通过后,通过邮件发送给商家的,其中RSA的两个公私钥,需要商户自己根据手册自行生成并上传和保存,具体这一步请务必参考支付宝开放平台的说明。
2 XE7中的开发准备工作:
- 下载一个java2op.exe,备用。
- 建立一个android的应用。
- copy支付宝sdk的三个jar包到工程目录(最好和你的pas文件一个目录,最好也把java2op这个文件copy到这里。
- 在IDE右边的ProjectManager中,添加支付宝SDK(android)的三个jar包,如右图。细心的朋友可能发现多了一个jar包:signutils.jar,这个不是支付宝(alipay)sdk带的,是我自己加上的,用途我们稍后再说。
- 打开一个CMD命令行窗口。
- 从命令行里,CD到你的工程目录,有jar包的地方,执行如下命令:
i. java2op -jar alipaysdk.jar -unit alipaysdk
ii. java2op -jar alipaysecsdk.jar -unit alipaysecsdk
iii. javs2op -jar alipayutdid.jar -unit alipayutdid
- 如果一切顺利,在当前目录应该发现新增的这三个pas文件。如图:
3 XE7中的代码工作:
- 请按照支付宝SDK的要求,在androidmanifest.template.xml文件总,增加sdk中的activity的引用,如图:
- 具体这个xml在什么位置,以及这个activity的字符串从何处得来,我就不费力解释了,相信大家都知道。
- 在支付宝SDK的接入手册中,针对混淆部分的要求,可以忽略,不用关心。
- 在适当的pas文件中,增加对之前生成的三个pas的引用(附带几个要用到的单元,也一并加上吧),如图:
- 注意:在编译的时候,这三个pas文件,会报错,几乎都是某个"property a"重复定义的问题,请直接手动把每个报错的‘a’都改为‘aaaaa’,随便什么即可,删除也行。
- 开始加入最关键的代码,例如我们要在一个按钮下开始支付,支付的商品名称、描述和价格,我们可以用三个edit来作为测试输入,这里就不截图描述了,过程如下:
iv.
在pas某个位置,声明三个常量或者属性备用,这三个属性就是之前支付宝返回的参数。
v.
在所谓的【支付按钮】的事件里,写如下代码:
procedure var PayTask: JPayTask; PayClass: JPayTaskClass; JOrderInfo: JString; OrderInfo,Sign: String; begin PayClass := TJPayTask.JavaClass; PayTask := PayClass.init(MainActivity); OrderInfo := Self.getOrderInfo('abcd','body','0.01'); sign := Self.Sign(OrderInfo); OrderInfo := OrderInfo + OrderInfo := OrderInfo + Self.Memo1.Lines.Text := OrderInfo; //调试用,你懂的。 JOrderInfo := StringToJString(OrderInfo); PayTask.pay(JOrderInfo); end; |
vi.
getOrderInfo: 这个函数文档后面会有,是按照支付宝的要求,对订单信息进行格式化处理的,这个函数中调用了一个getTradeNo,是自定义的,也就是生成订单号的,保证不重复即可,随便写。
vii.
Sign函数:这个函数就用到了之前在前面看到的signutils.jar这个包,原本支付宝的sdk是没有这包的,这个包是我自己用java编写并加入到项目中的,原因就是:支付宝sdk要求,需要对订单信息进行rsa签名,这个签名过程比较复杂,熟悉java的,可以下载java的demo来看一下,我尝试用delphi下的一些工具和第三方组件,但都失败了,可能是我还不是很熟悉吧,我就把java中的函数封装到这个jar中,供delphi来调用,很好用,文档的后面也会有这个函数的代码,但具体今后每个开发者用什么方法来给订单做sign的签名,只能大家各自想办法了。文档中,我会链接这个jar给大家。
viii.
如果一切正常,应该可以看到支付宝的界面了,至于调试过程中出现的各种错误,只能百度。
ix.
系统繁忙,请稍后重试:ALI64: 这个错误几乎都是订单信息格式不对,或者支付宝返回的各种参数没有用对,还有可能是没有开通无线快捷支付。
x.
系统繁忙,请稍后重试:ALI10:这个错误主要是sign签名不对。
- 附录代码:
function TForm3.getOrderInfo(subject, var s: string; begin // s // s // s // 商品名称 s // s // s // s // s // s // s // // // // // s // // // s // // Result := s; end; |
function TForm3.getOutTradeNo: string; var G: TGuid; S: string; begin G S S Result := 'abcdefghijklmn'; end; |
function TForm3.Sign(const Orders: var SignClass: JSignUtilsClass; Js,jpri: JString; begin Result := ''; try Js := StringToJString(Orders); JPri := StringToJString(RSA_PRIVATE); SignClass := TJSignUtils.JavaClass; SignClass.init; js := SignClass.sign(js,jpri); //js := SignClass.DoURLEncode(js); Result := JStringToString(js); finally end; |
其他:
4
真实业务场景的考虑
按照支付宝或者微信支付的开发手册的说法,一个标准的客户端接入支付业务模型应该是这样的,我忽略时序图,只用文字描述:
- 用户登录客户端,选择商品,然后点击客户端支付。
- 客户端收集商品信息,然后调用自己业务平台的预付款接口。
- 业务平台根据客户端提交的商品信息,生成自己的订单号等内容,并按照第三方支付的要求对订单信息进行拼装组合,并编码和签名。
- 业务平台返回签名后的订单信息给客户端。
- 客户端根据这个签名信息,呼出客户端的第三方支付系统,完成支付。
DELPHI移动端支付宝支付的更多相关文章
- 电脑端支付宝支付 -前端获取支付宝返回的form 以及submit 调用支付扫码页面
前端调取支付宝支付接口(后台进行封装,没有直接调取支付宝接口),调用返回的数据中,将会有一串的form表单数据返回,我们需要将此表单在当前调用页面submit下,以跳转到支付扫码页: 支付宝返回的fo ...
- PHP服务端支付宝支付及回调
支付宝支付 (由app端自行调起支付宝/微信) 1.下载PHP版SDK 1 <?php 2 3 define('IN_ECS', true); 4 5 /*App支付 PHP服务端*/ 6 /* ...
- PHP APP端支付宝支付
应业务需求,做了支付宝支付和微信支付,今天分享一下手机端app支付宝支付对接流程,实际开发过程是前后端分离,前端调用后端API接口,实现功能返回数据,我所用的跨挤啊为TP5,大致可以分为四步: 1.在 ...
- 微信端支付宝支付,iframe改造,解决微信中无法使用支付宝付款和弹出“长按地址在浏览器中打开”
微信对支付宝的链接屏蔽了, https://mapi.alipay.com/gateway.do?_input_charset=utf-8¬ify_url=http%3A%2F%2Fzh ...
- ecshop移动端支付宝支付对接
初始页,提交基本信息到api页面, <?php /* * * 功能:支付宝手机网站支付接口接口调试入口页面 * 版本:3.4 * 修改日期:2016-03-08 * 说明: * 以下代码只是为了 ...
- PHP PC端支付宝扫码支付
前面的文章已经描述过在蚂蚁金服开放平台创建应用签约等流程,详见:PHP App端支付宝支付,这里就不多说了,剩下的分两步,第一步是支付前的准备工作,也就是整合支付类文件,我已经整合好可以直接用,代码开 ...
- 支付宝支付功能(使用支付宝sdk)
1.准备参数 新建一个公共参数配置类NewAlipayconfig (可将参数存放到config配置文件中读取) public class NewAlipayconfi ...
- 【zhifu】web开发中的支付宝支付和微信支付
一.支付类型: 支付宝支付: 支付宝app内的网页支付: app外(即普通浏览器)网页支付: 微信支付: 微信app内的支付(在这里叫公众号支付) app外的支付(微信H5支付): 微信公众号的支付宝 ...
- DELPHI支付宝支付代码
真实业务场景的考虑 按照支付宝或者微信支付的开发手册的说法,一个标准的客户端接入支付业务模型应该是这样的,我忽略时序图,只用文字描述: 用户登录客户端,选择商品,然后点击客户端支付. 客户端收集商品信 ...
随机推荐
- emacs之配置speedbar
安装sr-speedbar,这样的话,speedbar就内嵌到emacs里面了 emacsConfig/speedbar-setting.el (require 'sr-speedbar) (setq ...
- linux svn soeasy
http://blog.163.com/longsu2010@yeah/blog/static/173612348201202114212933/
- Hive 查看日志
日志记录了程序运行的过程,是一种查找问题的利器. Hive中的日志分为两种1. 系统日志,记录了hive的运行情况,错误状况.2. Job 日志,记录了Hive 中job的执行的历史过程. 系统日志存 ...
- 视频描述(Video Captioning)调研
Video Analysis 相关领域介绍之Video Captioning(视频to文字描述)http://blog.csdn.net/wzmsltw/article/details/7119238 ...
- 【POJ】3378 Crazy Thairs(树状数组+dp+高精)
题目 传送门:QWQ 分析 题意:给个数列,求有多少五元上升组 考虑简化一下问题:如果题目求二元上升组怎么做. 仿照一下逆序对,用树状数组维护一下就ok了. 三元怎么做呢? 把二元的拓展一位就可以了, ...
- ASPxGridView删除、添加、修改成功后,弹出提示对话框的方法
分为几步: 1.在aspx文件中添加 function EndCallBack(s, e) { if (s.cpAlertMsg != "" && s.cpA ...
- maven+testng+reportng的pom设置
在pom.xml 加入: <dependency> <groupId>org.testng</groupId> <artifactId>testng&l ...
- IMMDevice::Activate and specifying IID_IBaseFilter as the interface identifier
Use the IMMDevice pointer to the endpoint returned by the enumeration process to activate the desire ...
- 纯C++binder服务和客户端实例
继承关系: 文件关系 IHelloService.h /* 参考: frameworks\av\include\media\IMediaPlayerService.h */ #ifndef ANDRO ...
- centos7 配置dns服务器
yum install bind ----------------------------------------------------------------------------------- ...