支付方式
1 支付宝
我们项目中使用支付宝的无线支付接口,首先从支付宝开放平台上下载支付宝的sdk,使用它的alipay.jar包,具体使用主要是当用户确定购买商品之后,首先生成订单,我们订单生成的规则就是用两个2-9的随机数+当前时间的毫秒值作为订单号,生成订单后再进行支付时就会调用支付宝的接口,调用支付宝的支付方法(方法Alipay.pay(String info)),支付方法需要传入支付相关信息,相关信息以KEY-VALUE键值对方式用&拼接组成。拼接的信息有
例如:订单信息(订单号,交易付款时间,购买数量等),商品信息(商品名称,商品单价,商品描述等),支付信息(买方,卖方支付宝账号信息,支付金额等)和notify_url(这个是通知地址,也就是支付宝的服务器把支付后成功与否等结果信息同步给我们公司服务器时候使用的地址)等。还需要拼接一个重要的签名参数sign,sign的值是上述这些交易信息RSA签名后的结果。支付信息提交后会提交到支付宝的服务器,支付宝的服务器完成整个支付功能后会给用户成功或者失败的提示界面。这个过程都是支付宝的功能。支付宝支付完成后,也会把信息同步给我们的服务器(也就是通过前面的notify_url这个地址),服务器处理完毕之后,我们的订单就会看到是支付成功还是失败这样的信息。当前我们调用pay方法的时候其实也会接到返回值。返回值是json格式里面有很多信息,我们主要从中取结果状态码(resultStatus),根据状态码的数值判断支付是否成功,例如返回值resultStatus=9000说明订单支付成功,除了支付宝本身的提示界面以外,我们也会给用户一个我们自己的提示(例如一个dialog,这个具体看你的项目)
2微信支付
我项目中使用的支付方式是微信支付。首先在微信开放平台注册应用(应用需要填写包名,应用的签名等)获取到 APPID 和 APPSecret,然后申请开通支付功能,提交企业以及银行账户资料等待审核,审核通过了在线签订合同。就可以使用微信支付了。同时商户会收到邮件获得财付通商户账户,支付秘钥key,财付通权限秘钥,财付通商户标示id等开发关键数据。
开发的时候从微信开放平台上下载微信支付的SDK使用其libammsdk.jar包。具体使用主要是当用户确定购买商品之后,首先请求微信服务器获取access_tocken,提交预付订单package,添加签名,提交预付订单获取prepayid,接着把请求参数返回给手机端(如果绿色部分是在自己服务器处理的话),调用api.sendReq(req);发起支付,发起支付的时候需要传入支付相关信息,相关信息以KEY-VALUE键值对方式用&拼接组成。拼接的信息有
例如:订单信息(订单号,交易付款时间,购买数量等),商品信息(商品名称,商品单价,商品描述等),支付信息(支付金额等)和notify_url(这个是通知地址,也就是微信的服务器把支付后成功与否等结果信息同步给我们公司服务器时候使用的地址)等。还需要拼接一个重要的签名参数sign,sign的值是上述这些交易信息MD5加密签名后的结果。支付信息提交后会提交到微信的服务器,微信服务器完成整个支付功能后会给用户(客户端和服务器分别提示)成功或者失败的提示。(更安全的做法是客户端查询自己的服务器确认支付成功后给用户提示)
简介
在与支付宝交易中,会有 2 对公私钥,即商户公私钥,支付宝公私钥。
商户公私钥:由商户生成,商户私钥用于对商户发往支付宝的数据签名;商户公钥需要上传至支付宝,当支付宝收到商户发来的数据时用该公钥验证签名。
支付宝公私钥:支付宝提供给商户,当商户收到支付宝发来的数据时,用该公钥验签。
2.流程
a. 移动端用商户私玥签名,将订单数据传给支付宝客户端,支付宝客户端将订单数据传给支付宝服务器,支付宝服务器根据订单数据中的商户信息,用商户上传的商户公钥验签,成功后进行支付操作;
b. 用户支付成功后,支付宝服务器用支付宝私钥签名回调数据并回调商家服务器(回调URL),同时支付宝客户端回调商家客户端;
c. 商家服务器用支付宝公钥验签,成功后更新商家订单状态等。
3.操作步骤
(1)下载开发指南和集成资料
登录支付宝,点击 我的商家服务->手机无线收款->快捷支付(无线)或请点此下载集成开发包
(2)解压下载的压缩包(WS_SECURE_PAY),找到并解压 openssl-0.9.8k_WIN32(RSA 密钥生成工具).zip 工具包
(3)生成原始RSA商户私钥文件
假设解压后的目录为 c:\alipay,命令行进入目录 C:\alipay\bin,执行“openssl genrsa-out rsa_private_key.pem 1024”,在 C:\alipay\bin 下会生成文件rsa_private_key.pem,其内容为原始的商户私钥(请妥善保存该文件),以下为命令正确执行截图:
(4)将原始RSA商户私钥转换为pkcs8格式
命令行执行“ openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM–nocrypt”得到转换为 pkcs8 格式的私钥。复制下图红框内的内容至新建 txt 文档,去掉换行,最后另存为“private_key.txt”(请妥善保存,签名时使用)。
命令行执行“ openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem”,在 C:\alipay\bin 文件夹下生成文件 rsa_public_key.pem。接着用记事本打开rsa_public_key.pem,复制全部内容至新建的 txt 文档,删除文件头“-----BEGIN PUBLICKEY-----”与文件尾“-----END PUBLIC KEY-----”及空格、换行,如下图。最后得到一行字符串并保存该 txt 文件为“public_key.txt”。
(6) 上传商户公钥至支付宝
浏览器访问 https://ms.alipay.com/index.htm 并用签约帐号登录,点击菜单栏“我的产品”,右侧点击“密钥管理”,见下图红色框内
点击“上传”,选择步骤(3)生成的“public_key.txt”并完成上传。
(7)获取RSA支付宝公钥成功上传公钥至支付宝后,页面显示如下:
其中红色框内部分即支付宝公钥,请复制至新建 txt 文档,去掉换行和空格,妥善保存(用于验签收到的支付宝通知)。