美文网首页Android安卓开发相关
安卓集成支付宝、微信支付(不依赖服务端)

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

作者: Thresh0ld | 来源:发表于2016-08-30 16:38 被阅读564次

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

    一. 查看你的Keystore签名

    keytool -list -v -keystore F:/Android/keystore/Threshold.jks -storepass yourkeystorepassword
    
    KeyStore.png

    二. 去支付宝微信平台申请应用

    1. 支付宝

          //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_Key.png

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

    2. 微信支付

    WX_App.png
    • 申请签约微信支付:
    App_Detail.png

    微信支付签约详情:


    WeiXin_Pay.png

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

    Email_Detail.png WeiXin_ShangHu.png

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

    ShangHu_Security.png

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

    三. 下载对应平台的SDK

    1. 支付宝SDK :

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

    ZhiFuBao_WenDang.png

    SDK下载页面链接

    2. 微信SDK

    SDK页面链接

    微信SDK.png

    四. 使用方式(App开发)

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

    先看看库的结构:


    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
      就像下面这样。
      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

    相关文章

      网友评论

      • 阿呆1号:想做类似iOS的自动续费的功能,请问支付宝和微信有提供相应的接口支持的吗?
      • Thresh0ld:我来回答下大家的疑问:支付宝直接传订单参数就可以付款这个大家都知道。其实微信也是同理的,只不过微信需要先调用统一下单接口获取预下单ID后才能提交订单,原理都差不多。

        抱歉这篇文章拖了这么久没补全。完整文章我将发布在我的微信公众号里。欢迎扫描上面的二维码关注。
      • 淡风林:不依赖服务端实现支付,这个恐怕不行吧。微信都是要服务端通过统一下单API去生成预付单的。支付宝倒是可以直接通过前端传订单参数。
      • 夏天的晓风:后面楼主实现了不依靠服务器端实现微信支付么?有没有demo啊?

      本文标题:安卓集成支付宝、微信支付(不依赖服务端)

      本文链接:https://www.haomeiwen.com/subject/tdefettx.html