最近在项目中集成支付宝和微信支付,真可谓搞的快吐了。
吐的原因有两方面:
一方面我这里的后端人员不愿意为手机端支付做些“额外工作”(支付签名啊等等);
另一方面则是由于这些BAT大公司的SDK看的让人云里雾里的,还要签一大堆条约等等。
本文则是从另一个角度来介绍使用支付宝和微信支付,服务端0行Code,签名,下单,处理全部在安卓这边完成。(在实际应用中,支付成功失败需要告诉服务端哦。或者配置下支付请求中的通知Url,这样服务端就能自动获得通知了)
一. 查看你的Keystore签名
keytool -list -v -keystore F:/Android/keystore/Threshold.jks -storepass yourkeystorepassword
KeyStore.png
二. 去支付宝微信平台申请应用
1. 支付宝
- 支付宝签约地址: https://b.alipay.com/order/serviceIndex.htm
- 签约时提供企业相关信息,在申请App支付时要提供App Keystore签名信息,以及生成的RSA密钥
//RSA密钥生成命令
//生成RSA私钥
openssl>genrsa -out rsa_private_key.pem 1024
//生成RSA公钥
openssl>rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
//将RSA私钥转换成PKCS8格式
openssl>pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
//注意:“>”符号后面的才是需要输入的命令。
注意上面生成的RSA密钥只需要将公钥给支付就可以,私钥在App中需要用到。
- 设置PID和RSA密钥地址:https://b.alipay.com/order/pidAndKey.htm
到这里,支付宝的申请就结束了。
2. 微信支付
- 微信应用申请地址(微信开放平台): https://open.weixin.qq.com/
- 申请签约微信支付:
微信支付签约详情:
WeiXin_Pay.png
邮件中会有你的商户号和密码,带着账号密码我们来登录微信商户平台,邮件内容如下:
Email_Detail.png- 登录微信商户平台:https://pay.weixin.qq.com/
设置密钥(建议设成前面申请应用中的AppSecret):
ShangHu_Security.png到这里,微信支付的申请应该是结束了,接下来记得下载SDK哦。
三. 下载对应平台的SDK
1. 支付宝SDK :
签约管理
下载技术集成文档:
2. 微信SDK
微信SDK.png四. 使用方式(App开发)
我将支付宝和微信支付封装成一个库,通过上面的操作,想必你已经获取到了开发中需要用到的appId、key和secret等信息。下面来使用吧。
先看看库的结构:
image.png
整体使用流程如下:
- 库的使用者(也就是你)编写微信/支付宝的支付配置对象(WechatPayConfig / AliPayConfig)
- 然后再编写要支付的订单对象(OrderInfo)
- 再将 支付配置对象 和 订单对象 提交给 支付入口Activity (PayEntryActivity)来处理。
下面来具体分别说下使用细节:
1. 支付宝
- 实现支付监听回调接口(PayStatusListener)
例如让你的Fragment实现这个接口
image.png - 设置支付监听
PayEntryActivity.payStatusListener = this
- 编写支付配置对象 和 订单对象
val payConfig = AliPayConfig(alipayAppId, rsaPrivateKey,false)
val orderInfo = OrderInfo("admin",OrderUtils.createOutTradeNo(),123,"驾培宝订单缴费-admin-2017.10.11",
"订单详情描述", Date())
- 调起支付宝
PayEntryActivity.startAliPay(context,orderInfo,payConfig)
2. 微信
- 首先需要在你的App模块中的Mainfest.xml中配置微信支付的activity-alias,
因为微信限制微信支付的入口Activity必须为 你的应用包名.wxapi.WXPayEntryActivity
就像下面这样。
wechat.png - 接下来同上面类似,编写支付对象和配置对象然后调起微信支付
val payConfig = WechatPayConfig("appid","appSecret","corpId","merchantId",
"http://www.notifyUrl")
//注意金额单位为分。 1元 = 100分
val orderInfo = OrderInfo("admin", OrderUtils.createOutTradeNo(),123,"订单缴费-admin-2017.10.11",
"订单详情描述", Date())
PayEntryActivity.payStatusListener = this
debug { "开始调起微信支付" }
PayEntryActivity.startWeChatPay(context,orderInfo,payConfig)
注意上面参数里的appid,appSecret等参数要换成你自己申请到的数据。
最后最后,附上久违的demo地址:https://github.com/wind0ws/wepay
关注我的公众号.jpg
网友评论
抱歉这篇文章拖了这么久没补全。完整文章我将发布在我的微信公众号里。欢迎扫描上面的二维码关注。