/pingpp-ruby

Primary LanguageRubyMIT LicenseMIT

Pingpp Ruby SDK

简介

lib 文件夹下是 Ruby SDK 文件,
example 文件夹里面是一个简单的接入示例,该示例仅供参考。

版本要求

Ruby 版本 1.8.7 及以上

安装

gem install pingpp

或者使用源码构建:

gem build pingpp.gemspec
gem install pingpp-<VERSION>.gem

接入方法

初始化

如果你使用的是 Ruby on Rails,可以在 config/initializers 目录下创建 pingxx.rb 文件。

require "pingpp"
Pingpp.api_key = "YOUR-KEY"

设置请求签名密钥

密钥需要你自己生成,公钥请填写到 Ping++ Dashboard
设置你的私钥路径

Pingpp.private_key_path = '/path/to/your_rsa_private_key.pem'

设置 Ping++ 公钥

公钥请登录 Ping++ Dashboard 获取
设置你的 Ping++ 公钥路径

Pingpp.pub_key_path = "/path/to/pingpp_rsa_public_key.pem"

设置自定义 CA 证书路径

Pingpp.ca_bundle = "/path/to/cacert.pem"

不设置时,会默认使用 SDK 包含的 CA 证书。
如果需要手动更新 CA 证书,可从 https://curl.haxx.se/docs/caextract.html 下载,并使用此方法设置证书路径。

设置重试

设置重试次数,0 表示不重试,默认为 1

Pingpp.max_network_retries = 1

当 SDK 请求遇到以下报错时,会自动重试。

Errno::ECONNREFUSED,
Errno::ECONNRESET,
Errno::ETIMEDOUT,
RestClient::Conflict,
RestClient::RequestTimeout,
RestClient::BadGateway,

当服务端返回 502 时,是否根据返回内容(阿里高防返回)来判断是否重试。false 表示只要是 502,全部重试。默认为 true

Pingpp.bad_gateway_match = false

支付

Pingpp::Charge.create(
  :order_no  => "123456789",
  :app       => { :id => "APP_ID" },
  :channel   => channel,
  :amount    => 100,
  :client_ip => "127.0.0.1",
  :currency  => "cny",
  :subject   => "Your Subject",
  :body      => "Your Body"
)

验证 Webhooks

Pingpp::Webhook.verify?(request) # 验证回调
JSON.parse(request.raw_post) # 解析回调内容(Ruby on Rails)

查询

Pingpp::Charge.retrieve("CHARGE_ID")
Pingpp::Charge.all(:limit => 5)

退款

Pingpp::Charge.retrieve("CHARGE_ID").refunds.create(:description => "Refund Description")

退款查询

Pingpp::Charge.retrieve("CHARGE_ID").refunds.retrieve("REFUND_ID")
Pingpp::Charge.retrieve("CHARGE_ID").refunds.all(:limit => 5)

红包

Pingpp::RedEnvelope.create(
  :order_no    => "123456789",
  :app         => { :id => "APP_ID" },
  :channel     => "wx_pub",
  :amount      => 100,
  :currency    => "cny",
  :subject     => "Your Subject",
  :body        => "Your Body",
  :extra       => {
    :nick_name => "Nick Name",
    :send_name => "Send Name"
  },
  :recipient   => "Openid",
  :description => "Your Description"
)

微信公众号获取签名

如果使用微信 JS-SDK 来调起支付,需要在创建 charge 后,获取签名(signature),传给 HTML5 SDK。

jsapi_ticket = Pingpp::WxPubOauth.get_jsapi_ticket(wx_app_id, wx_app_secret)
ticket = jsapi_ticket['ticket']

正常情况下,jsapi_ticket 的有效期为 7200 秒。由于获取 jsapi_ticket 的 api 调用次数非常有限,频繁刷新 jsapi_ticket 会导致 api 调用受限,影响自身业务,开发者必须在自己的服务器全局缓存 jsapi_ticket

下面方法中 url 是当前网页的 URL,不包含#及其后面部分

signature = Pingpp::WxPubOauth.get_signature(charge, ticket, url)

然后在 HTML5 SDK 里调用

pingpp.createPayment(charge, callback, signature, false);

Event 事件

Pingpp::Event.retrieve("EVENT_ID")

企业付款

Pingpp::Transfer.create(
  :order_no    => "123456789",
  :app         => { :id => "APP_ID" },
  :channel     => "wx_pub",
  :amount      => 100,
  :currency    => "cny",
  :type        => "b2c",
  :recipient   => "Openid",
  :description => "Your Description"
)

企业付款查询

Pingpp::Transfer.retrieve("TRANSFER_ID")
Pingpp::Transfer.all(:limit => 5)

身份证认证

Pingpp::Identification.identify(
  :type => "id_card",
  :app  => APP_ID,
  :data => {
      :id_name => "张三", # 姓名
      :id_number => "310181198910107641" # 身份证号
  }
)

银行卡认证

Pingpp::Identification.identify(
  :type  => "bank_card",
  :app  => APP_ID,
  :data => {
      :id_name => "张三", # 姓名
      :id_number => "310181198910107641", # 身份证号
      :card_number => "6201111122223333", # 银行卡号
      :phone_number => "18623234545" # 银行预留手机号,不支持 178 号段
  }
)

部分示例清参考 example 目录下的文件。

账户系统相关接口请查看 Ping++ API 文档 或参考测试示例

详细信息请参考 API 文档