国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

跳出ping++開發中API請求異常問題

Lin_R / 1749人閱讀

摘要:近期在做微信支付那方面的工作由于要在之前開發人員的基礎上進行開發其中使用到了這個第方支付的。下面梳理下正常開發的流程請點擊下面的鏈接付款。結果總是提示必須是組鍵值對。主要是官方沒有提供明確的請求頭信息給我們導致我們一直在兜圈。

近期在做微信支付那方面的工作,由于要在之前開發人員的基礎上進行開發,其中使用到了ping++這個第3方支付的SDK。不得不說,ping++的SDK做的挺簡單的,但是其文檔真心寫的有點坑。不過相對其他的接入,坑少了那么一些。
下面梳理下正常開發的流程,請點擊下面的鏈接付款。
可以看到主要有5個步驟:

設置 API-Key

SDK 驗證簽名設置

發起支付請求獲取支付憑據

將獲得的支付憑據傳給 Client

接收 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
< HTTP/1.1 200 OK
< Date: Sun, 10 Apr 2016 03:26:51 GMT
< Content-Type: application/json;charset=utf-8
< Content-Length: 1229
< Connection: keep-alive
< X-Powered-By: PHP/5.6.2
< Access-Control-Allow-Methods: GET, POST, HEAD, OPTIONS, DELETE
< Access-Control-Max-Age: 300
< Access-Control-Allow-Credentials: true
< Cache-Control: no-cache, no-store
< Strict-Transport-Security: max-age=31536000; includeSubDomains

我們使用-v選項查看了其詳細的內容,甚至連TCP的3次握手過程都可以看到。
還有就是出錯信息,最好看下面的鏈接報錯信息。

參考文章:

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45435.html

相關文章

  • 跳出ping++開發API請求異常問題

    摘要:近期在做微信支付那方面的工作由于要在之前開發人員的基礎上進行開發其中使用到了這個第方支付的。下面梳理下正常開發的流程請點擊下面的鏈接付款。結果總是提示必須是組鍵值對。主要是官方沒有提供明確的請求頭信息給我們導致我們一直在兜圈。 近期在做微信支付那方面的工作,由于要在之前開發人員的基礎上進行開發,其中使用到了ping++這個第3方支付的SDK。不得不說,ping++的SDK做的挺簡單的,...

    anonymoussf 評論0 收藏0
  • 跳出ping++退款的坑

    摘要:近期在項目的開發過程中需要用到的退款功能由于使用的版本比官方提供的要低個小版本因此問題并不是很大。然后我們通過得類的方法獲取給定然后再根據其屬性得方法傳入關鍵字參數來實現退款的操作。需要提示的是參數只能是最大個字符不然又會出現一些問題。 近期在項目的開發過程中,需要用到ping++的退款功能,由于使用的版本比官方提供的要低2個小版本,因此問題并不是很大。但是由于官方文檔有些內容寫的比較...

    FWHeart 評論0 收藏0
  • 基于Zabbix + Docker開發的監控系統

    摘要:和就構成了監控系統的核心服務。其中,一臺物理機器中,包含了多個,每個中運行這一個。性能對第一個版本進行了性能測試,得到了以下性能指標臺服務器,臺部署,臺部署。 (原文地址:https://blog.goquxiao.com/posts/2015/02/17/ji-yu-zabbix-dockerkai-fa-de-jian-kong-xi-tong/) 背景 團隊所開發的持續監測網站/...

    fanux 評論0 收藏0

發表評論

0條評論

Lin_R

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<