[前车之贱] 7天准(cai)备(keng)支付项目,5分钟教会你

项目背景

最近我在为我公司优达学城的支付项目重构作准备,不可避免的须要对接支付宝和微信。
因为在调研和写demo的过程当中,遇到了不少的问题,除了官方文档,网上的资料又十分稀缺(特别是对于Java, PHP和.Net之外的语言,由于没有官方提供的SDK,全部逻辑都要本身写,我使用的是Golang),所以写下此文愿能帮助到你们。若是有不正确和但愿继续补充的地方也但愿在评论中指出。php

方案选定

对于web应用来讲,我采用了微信扫码支付,支付宝电脑网站支付的方案。因为微信官方提供了两种扫码支付的方案,我选择第二种,由于这样就能和支付宝的的支付逻辑统一。前端

流程图

流程说明

  1. 用户下单。
  2. 服务器收到请求,生成惟一的订单号,而且带上接口要求的参数和签名,发送请求。git

    1. 支付签名github

      • 微信支付签名我选择MD5,我相信MD5各个语言都支持并且都很方便,这里就不赘述。
      • 支付宝签名推荐RSA2。这里写下Golang版本的核心签名方法。web

        // 使用sha256
        h := sha256.New()
        h.Write(data)
        d := h.Sum(nil)
        sign := rsa.SignPKCS1v15(rand.Reader, r.PrivateKey, crypto.SHA256, d)复制代码

        完整代码能够移步个人Gistapi

    2. 发送请求
      • 微信和支付宝要求的都是POST请求。文档没有直接说明是POST仍是其余方法,我是经过阅读文档提供的demo的代码和源码知道的,在开发支付宝的时候我一直觉得是GET请求,全部的参数都是param,致使我浪费了挺多时间
      • 微信的Post Body是xml格式,到统一下单的API,注意带上headerContent-Type: text/xml
      • 支付宝的POST Body是Form表单,个人测试是以x-www-form-urlencoded的形式提交,可以得到正确的响应。
  3. 将支付供应商的返回的数据(支付宝是HTML代码;微信是二维码连接,须要根据连接内容生成二维码)在前端渲染显示给用户。
  4. 用户支付订单,而后用户的支付App会通知支付供应商的服务器。
  5. 用户支付成功,支付供应商会调用商户提供的回调API,通知用户是否支付成功。(若是支付失败,须要调用订单关闭接口)。
  6. 验证调用的请求是否合法,处理内部逻辑,而且返回对应的响应,支付供应商会根据响应决定是否再次发送回调请求。
  7. 若有须要,能够调用订单查询API,检查订单状态。

沙盒模式测试(重要)

  1. 支付宝的沙盒模式,你必须先下载支付宝提供的沙盒模式的App才能测试。还能够参考论坛上这篇《如何使用沙箱环境测试手机网站》
  2. 微信的沙盒模式,必须按照验收文档的步骤来作。我有一段时间发现本身无论怎么样都没法测试成功,后面在一个地方看到,必须用验收文档的金额来测试,也就是3.01元。

付款金额单位差别(重要)

  • 微信的单位是分,所以3.01元,提交的时候应该是301。我一直没注意这个,结果沙盒测试时候一直过不了。最后知道是这个缘由的时候,我给本身灌了一瓶82年的可乐。我只能怪本身太年轻。
    bash

  • 支付宝单位为元,精确到小数点后两位,取值范围[0.01,100000000]。服务器

总结

  • 在作支付开发的时候,先仔细阅读文档,想清楚步骤再开发。磨刀不误砍柴工。
  • 支付宝和微信支付的开发团队若是看到这篇文章,但愿能把文档再润色一下。文档不是给开发者设置障碍,而是提供帮助,让开发者快速完成开发。

小福利

人工智能anywhere的时代,咱们不但愿若干年后的30岁是否要转行再也不写代码,咱们不但愿纠结于40岁由于落伍而被时代淘汰。咱们都但愿过上本身喜欢的生活打王者去旅行。那就让咱们一块儿来组队学习Google认证的机器学习,再也不作代码的“搬运工”,可以把握将来的是如今的你。
微信

相关文章
相关标签/搜索