安卓集成支付宝、微信支付(不依赖服务端)

最近在项目中集成支付宝和微信支付,真可谓搞的快吐了。
吐的原因有两方面:
一方面我这里的后端人员不愿意为手机端支付做些“额外工作”(支付签名啊等等);
另一方面则是由于这些BAT大公司的SDK看的让人云里雾里的,还要签一大堆条约等等。
本文则是从另一个角度来介绍使用支付宝和微信支付,服务端0行Code,签名,下单,处理全部在安卓这边完成。(在实际应用中,支付成功失败需要告诉服务端哦。或者配置下支付请求中的通知Url,这样服务端就能自动获得通知了)

一. 查看你的Keystore签名

keytool -list -v -keystore F:/Android/keystore/Threshold.jks -storepass yourkeystorepassword
安卓集成支付宝、微信支付(不依赖服务端)_第1张图片
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张图片
PID_Key.png

到这里,支付宝的申请就结束了。

2. 微信支付

  • 微信应用申请地址(微信开放平台): https://open.weixin.qq.com/
安卓集成支付宝、微信支付(不依赖服务端)_第3张图片
WX_App.png
  • 申请签约微信支付:
安卓集成支付宝、微信支付(不依赖服务端)_第4张图片
App_Detail.png

微信支付签约详情:


安卓集成支付宝、微信支付(不依赖服务端)_第5张图片
WeiXin_Pay.png

邮件中会有你的商户号和密码,带着账号密码我们来登录微信商户平台,邮件内容如下:

安卓集成支付宝、微信支付(不依赖服务端)_第6张图片
Email_Detail.png
  • 登录微信商户平台:https://pay.weixin.qq.com/
安卓集成支付宝、微信支付(不依赖服务端)_第7张图片
WeiXin_ShangHu.png

设置密钥(建议设成前面申请应用中的AppSecret):

安卓集成支付宝、微信支付(不依赖服务端)_第8张图片
ShangHu_Security.png

到这里,微信支付的申请应该是结束了,接下来记得下载SDK哦。

三. 下载对应平台的SDK

1. 支付宝SDK :

签约管理
下载技术集成文档:

安卓集成支付宝、微信支付(不依赖服务端)_第9张图片
ZhiFuBao_WenDang.png

SDK下载页面链接

2. 微信SDK

SDK页面链接

安卓集成支付宝、微信支付(不依赖服务端)_第10张图片
微信SDK.png

四. 使用方式(App开发)

我将支付宝和微信支付封装成一个库,通过上面的操作,想必你已经获取到了开发中需要用到的appId、key和secret等信息。下面来使用吧。

先看看库的结构:


安卓集成支付宝、微信支付(不依赖服务端)_第11张图片
image.png

整体使用流程如下:

  1. 库的使用者(也就是你)编写微信/支付宝的支付配置对象(WechatPayConfig / AliPayConfig
  2. 然后再编写要支付的订单对象(OrderInfo
  3. 再将 支付配置对象 和 订单对象 提交给 支付入口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
    就像下面这样。
    安卓集成支付宝、微信支付(不依赖服务端)_第12张图片
    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


安卓集成支付宝、微信支付(不依赖服务端)_第13张图片
关注我的公众号.jpg

你可能感兴趣的:(安卓集成支付宝、微信支付(不依赖服务端))