Code Monkey home page Code Monkey logo

pingpp-ruby's Introduction

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 文档

pingpp-ruby's People

Contributors

giaogiaocat avatar samurai00 avatar sllkk avatar warmwind avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pingpp-ruby's Issues

Pingpp::Webhook.verify? 支持将pub_key作为参数传入

当系统内有多个pingpp的账户时,pub_key就不是全局唯一的了,所以目前的方式无法针对这样的场景来使用。
另外,pub_key作为参数的话可以将这个方法完全独立为一个工具方法,对外部就没有依赖了。
如果pub_key传入为空的时候,可以默认使用Pingpp.pub_key

创建Charge对象时 报OpenSSL的错误

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

服务端Ruby: 2.3.0
openssl gem : 0.2.0
openssl : openssl-1.0.1e

ping++ 不兼容rails 5.0

报错信息
Resolving dependencies...
Bundler could not find compatible versions for gem "mime-types":
In snapshot (Gemfile.lock):
mime-types (= 3.1)

In Gemfile:
rails (< 5.1, >= 5.0.0.rc1) was resolved to 5.0.0.rc1, which depends on
actionmailer (= 5.0.0.rc1) was resolved to 5.0.0.rc1, which depends on
mail (>= 2.5.4, ~> 2.5) was resolved to 2.6.4, which depends on
mime-types (< 4, >= 1.16)

pingpp was resolved to 1.0.2, which depends on
  mime-types (< 3.0, >= 1.25)

Running bundle update will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.