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++ Dashboard 获取
设置你的 Ping++ 公钥路径
Pingpp.pub_key_path = "/path/to/pingpp_rsa_public_key.pem"
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"
)
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);
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 文档。