热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

跳出ping++开辟中API要求非常题目

近期在做微信付出那方面的事情,因为要在之前开辟人员的基础上举行开辟,个中运用到了ping++这个第3方付出的SDK。不得不说,ping++的SDK做的挺简朴的,然则其文档至心写的有

近期在做微信付出那方面的事情,因为要在之前开辟人员的基础上举行开辟,个中运用到了ping++这个第3方付出的SDK。不得不说,ping++的SDK做的挺简朴的,然则其文档至心写的有点坑。不过相对其他的接入,坑少了那末一些。
下面梳理下平常开辟的流程,请点击下面的链接付款。
能够看到主要有5个步骤:

  1. 设置 API-Key

  2. SDK 考证署名设置

  3. 提议付出要求猎取付出凭证

  4. 将取得的付出凭证传给 Client

  5. 吸收 Webhooks关照(开启Live形式才有效)

然后再看下SDK生意业务流程,能够发明写的照样挺通俗易懂的。
个人以为比较坑爹的是它API文档的部份,完整就是逗你玩的。为何这么说,请往下看。
官方说Ping++的API采纳REST作风设想,真的是REST作风,完整停留在CURD的阶段,离背面的生长另有很长的路要走。实话说,Github API写的还比较像REST些,而这个ping++的就不想说了。

入坑

下面我们正式入坑,其最简朴的体式格局以下,运用curl举行要求:

curl https://api.pingxx.com/v1/charges \
-u sk_test_ibbTe5jLGCi5rzfH4OqPW9KC:

官方采纳Authentication Basic的体式格局举行考证,平常都邑过的,返回你要的数据。然则官方供应的例子至心的简朴,而且只用uncap这类体式格局,而我们公司要运用的是微信民众付出,那末坑就出来了。当时我是如许要求的:

c@y-pc:~$ curl https://api.pingxx.com/v1/charges -u sk_test_ibbTe5jLGi5rzfH4OqPW9KC: -d order_no=123456789 -d amount=100 -d app[id]=app_1Gqj58ynP0mHeX1q -d channel=wx_pub -d currency=cny -d client_ip=127.0.0.1 -d subject="Your Subject" -d body="Your Body" -d extra='{"open_id":"xxxxx"}'
{
"error": {
"type": "invalid_request_error",
"message": " 无效的参数 extra: 必需是一组键值对",
"param": "extra"
}

注重,这里我们将channel修改成wx_pub了,因而必需增加1个extra字段,在该字段中有1个open_id必填的玩意。效果,老是提醒extra必需是1组键值对。很明显,岂非extra='{"open_id":"xxxxx"}不是1个键值对吗,然则机械看不出来它是。

出坑

背面,我们预备跳出这个坑,我们去看官方给我们供应的SDK中的例子,能够发明app[id]这里的id是以{“id”:”xxxx”}如许的体式格局存在的,而不是理解为app[id]如许1个字段,因而我们换个体式格局举行要求:

curl https://api.pingxx.com/v1/charges -u sk_test_ibbTe5jLGi5rzfH4OqPW9KC: -d order_no=123456789 -d amount=100 -d app[id]=app_1Gqj58ynP0mHeX1q -d channel=wx_pub -d currency=cny -d client_ip=127.0.0.1 -d subject="Your Subject" -d body="Your Body" -d extra[open_id]=xxxxx
{
"id": "ch_C4O4CKXHCK48rnvn5CH8iP4G",
"object": "charge",
"created": 1460257030,
"livemode": false,
"paid": false,
"refunded": false,
"app": "app_1Gqj58ynP0mHeX1q",
"channel": "wx_pub",
"order_no": "123456789",
"client_ip": "127.0.0.1",
"amount": 100,
"amount_settle": 100,
"currency": "cny",
"subject": "Your Subject",
"body": "Your Body",
"extra": {
"open_id": "xxxxx"
},
"time_paid": null,
"time_expire": 1460264230,
"time_settle": null,
"transaction_no": null,
"refunds": {
"object": "list",
"url": "/v1/charges/ch_C4O4CKXHCK48rnvn5CH8iP4G/refunds",
"has_more": false,
"data": []
},
"amount_refunded": 0,
"failure_code": null,
"failure_msg": null,
"metadata": {},
"credential": {
"object": "credential",
"wx_pub": {
"appId": "wxmbrpg8tm1k04yzbt",
"timeStamp": 1460257030,
"nonceStr": "25c7de13570a1b5f6d23614bdf49443d",
"package": "prepay_id=1101000000160410rtepylz1surl5uzd",
"signType": "MD5",
"paySign": "10F1AACE79C0ED0E10EB4080D140F913"
}
},
"description": null

这里我们将open_id放在extra中就胜利了,如许才能够吸收到。不得不说,这API挪用完整就是1个坑。主假如官方没有供应明白的要求头信息给我们,致使我们一直在兜圈。
所以,我不消除这文档就是1个实习生写的。不得不说,官方给我们供应了1个不知名的REST的scheme,假如不是过这个坑完整就是不知道它在弄哪样。比方jsonapi供应了如许1种要求体式格局,估计假如不申明,你也看不懂它写的是什么:

GET /posts?include=author&sort[posts]=-created,title&sort[people]=name

下面是上述要求的相应头信息:

c@y-pc:~$ curl https://api.pingxx.com/v1/charges -u sk_test_ibbTe5jLGCi5rzfH4OqPW9KC: -d order_no=123456789 -d amount=100 - app[id]=app_1Gqj58ynP0mHeX1q -d channel=wx_pub -d currency=cny -d client_ip=127.0.0.1 -d subject="Your Subject" -d body="Your Body" -d extra[open_id]=xxxxx -v
* Trying 121.43.74.100...
* Connected to api.pingxx.com (121.43.74.100) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* NPN, negotiated HTTP1.1
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Unknown (67):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: C=CN; ST=Shanghai; L=Shanghai; O=Shanghai Jianmi Network Technology Co., LTD; OU=IT; CN=api.pingxx.com
* start date: Nov 19 00:00:00 2015 GMT
* expire date: Jan 17 23:59:59 2017 GMT
* subjectAltName: api.pingxx.com matched
* issuer: C=US; O=Symantec Corporation; OU=Symantec Trust Network; CN=Symantec Class 3 Secure Server CA - G4
* SSL certificate verify ok.
* Server auth using Basic with user 'sk_test_ibbTe5jLGCi5rzfH4OqPW9KC'
> POST /v1/charges HTTP/1.1
> Host: api.pingxx.com
> Authorization: Basic c2tfdGVzdF9pYmJUZTVqTEdDaTVyemZINE9xUFc5S0M6
> User-Agent: curl/7.47.1
> Accept: */*
> Content-Length: 163
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 163 out of 163 bytes

我们运用-v选项查看了其细致的内容,甚至连TCP的3次握手历程都能够看到。
另有就是失足信息,最好看下面的链接报错信息。

参考文章:

https://www.pingxx.com/document/api/#api-charges


推荐阅读
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
author-avatar
violet
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有