亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Ruby > 正文

Ruby on Rails在Ping ++ 平臺實現支付

2020-10-29 19:36:43
字體:
來源:轉載
供稿:網友

本地數據庫創建訂單表。

建議包含以下字段,參考官方API( https://pingxx.com/document/api#api-c-new):

order_no:required

  商戶訂單號,適配每個渠道對此參數的要求,必須在商戶系統內唯一。  alipay: 1-64 位,  wx: 1-32 位,  bfb: 1-20 位,  upacp: 8-40 位,  yeepay_wap:1-50 位,  jdpay_wap:1-30 位,  cnp_u:8-20 位,  cnp_f:8-20 位,  推薦使用 8-20 位,要求數字或字母,不允許特殊字符

app[id]:required

 支付使用的 app 對象的 id,請登陸管理平臺查看。

subject:required

  商品的標題,該參數最長為 32 個 Unicode 字符,  銀聯全渠道(upacp/upacp_wap)限制在 32 個字節。

body:required

 商品的描述信息,該參數最長為 128 個 Unicode 字符, yeepay_wap 對于該參數長度限制為 100 個 Unicode 字符。

channel:required

 支付使用的第三方支付渠道(更多請參考api)  alipay:支付寶手機支付  alipay_wap:支付寶手機網頁支付  alipay_qr:支付寶掃碼支付  alipay_pc_direct:支付寶 PC 網頁支付  apple_pay:Apple Pay  bfb:百度錢包移動快捷支付  bfb_wap:百度錢包手機網頁支付     wx:微信支付  wx_pub:微信公眾賬號支付  wx_pub_qr:微信公眾賬號掃碼支付  jdpay_wap:京東手機網頁支付

amount: required

 訂單總金額, 單位為對應幣種的最小貨幣單位, 例如:人民幣為分(如訂單總金額為 1 元,此處請填 100)。

client_ip: required

  發起支付請求終端的 IP 地址,格式為 IPV4,如: 127.0.0.1。

      
以上是在ping++ 平臺創建訂單時需要的參數

以下是在ping++ 平臺創建訂單成功以及付款成功回調的參數

paid :支付狀態,默認為falserefunded :退款狀態,默認為falsetime_paid :付款時間time_refunded:退款時間charge_no:返回的charge編號transaction_no :交易號

步驟:

1.本地創建一條訂單記錄

 def create_order

 #獲取參數   #判斷參數合法性   order = Order.new #保存訂單信息,注意subject以及body的長度 #生成訂單號并保存 order_no = (Time.now.to_formatted_s(:number)).to_s 6.times{ order_no<<rand(10).to_s } order.order_no = order_no #獲取ip并保存 order.client_ip = request.remote_ip  if order.save  #返回成功信息 else  render_failure(order.errors.messages.first[1][0]) end end

2.執行支付

現在ping++ 平臺創建一條記錄
1.在order.rb文件中新建一個方法

 def pay_url  #獲取api_key以及app_id  Pingpp.api_key = PingPlusPlus.get_ping_settings["PING_API_KEY"]  app_id = PingPlusPlus.get_ping_settings["PING_APP_ID"]  #不同支付渠道的回調地址  case self.channel    when "alipay"    extra = {   }    when "wx"    extra = {   }    end  #ping++平臺新建一個訂單  begin   charge = Pingpp::Charge.create(     :order_no => self.order_no,     :app  => { :id => app_id },     :channel => self.channel,     :amount => self.amount.round(2) * 100.to_i,     :client_ip => self.client_ip,     :currency => "cny",     :subject => self.subject[0..31],     :body  => self.body[0..127],     :extra  => extra     )      return charge  rescue Pingpp::PingppError => error    logger.error 'ping++平臺創建訂單失敗'    logger.error error.http_body    return false  end end

2.調用pay_url方法創建訂單,返回給客戶端charge對象,客戶端拿著charge對象去ping++ 平臺支付

 def confirm_and_payment  order_no = params[:order_no]  channel = params[:channel]  if order_no.blank? || channel.blank?   render_failure("參數不完整!") and return  end   order = Order.where(order_no: order_no).first  if order.blank?    render_failure("訂單不存在!")and return  end  charge = order.pay_url  if charge == false   render_failure("訂單支付失??!") and return  else   order.update_attribute(:charge_no ,(JSON.parse charge.to_s)['id'])   render(:json => charge)  end end

異步通知更新付款結果

 def notify  status = 400  #判斷請求是否有ping++的簽名信息  if request.headers['x-pingplusplus-signature'].blank?   status = 401   logger.debug '【報哪家】:======付款回調請求來源錯誤!?。。。?   return  end   #獲取簽名信息  raw_data = request.body.read  if request.headers['x-pingplusplus-signature'].is_a?(Array)   signature = request.headers['x-pingplusplus-signature'][0].to_s  else   signature = request.headers['x-pingplusplus-signature'].to_s  end    # 獲取「Webhooks 驗證 Ping++ 公鑰」  pub_key_path ="#{Rails.root}/config/rsa_public_key.pem"  if verify_signature(raw_data, signature, pub_key_path)    #處理接收的結果    event = JSON.parse(raw_data)     #付款成功    if event["type"] == 'charge.succeeded'    # 開發者在此處加入對支付異步通知的處理代碼    order_no = event['data']['object']['order_no']    order = Order.where(order_no: order_no).first    order_from = order.status     if order.present?     #更新字段     order.paid = event['data']['object']['paid']      if order.save       status = 200     else      status = 500     end    else      logger.debug '數據庫沒有該條記錄!'    end    #退款成功   elsif event['type'] == 'refund.succeeded'     # 開發者在此處加入對退款異步通知的處理代碼    order_no = event['data']['object']['order_no']    order = Order.where(order_no: order_no).first    if order.present?     #更新字段     order.time_refunded = Time.at(event['data']['object']['time_succeed'])     if order.save      status = 200     else      status = 500     end    else      logger.debug '數據庫沒有該條記錄!'    end   else    logger.debug '付款回調返回未知操作!'   end   else    logger.debug '付款回調請求來源錯誤!'    status = 403   end   render :nothing => true, :status => status end

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲高清在线观看| 欧美重口另类videos人妖| 久久视频中文字幕| 欧美激情在线狂野欧美精品| 福利视频第一区| 午夜精品美女自拍福到在线| 亚州欧美日韩中文视频| 国产精品高清免费在线观看| 97精品在线视频| 国产精品久久久久久一区二区| 亚洲摸下面视频| 久色乳综合思思在线视频| 亚洲人成在线观看网站高清| 成人深夜直播免费观看| 欧美激情精品久久久| 精品无码久久久久久国产| 亚洲国产欧美自拍| 国产一区玩具在线观看| 国产精品爽爽爽| 色综合导航网站| 国产精品久久久久久一区二区| 欧美俄罗斯乱妇| 色午夜这里只有精品| 88国产精品欧美一区二区三区| 久久久久国产精品免费| 欧美乱大交xxxxx另类电影| 最近的2019中文字幕免费一页| 91久久精品日日躁夜夜躁国产| 一区二区成人精品| 精品久久久久久久久国产字幕| 亚洲精品日韩久久久| 亚洲午夜精品视频| 国产免费一区二区三区在线能观看| 国产成人高潮免费观看精品| 欧美日韩在线影院| 亚洲www永久成人夜色| 日本久久久久亚洲中字幕| 国产精品劲爆视频| 自拍亚洲一区欧美另类| 中文字幕亚洲色图| 中文在线资源观看视频网站免费不卡| 久久亚洲综合国产精品99麻豆精品福利| 国产精品入口尤物| 97色在线视频观看| 亚洲最大的av网站| 国产日韩av在线播放| 川上优av一区二区线观看| 欧美性感美女h网站在线观看免费| 美女福利视频一区| 国产精品一区二区三区在线播放| 欧美韩日一区二区| 欧美做受高潮1| 亚洲欧洲午夜一线一品| 亚州av一区二区| 亚洲精品视频网上网址在线观看| 亚洲精品720p| 国产mv久久久| 2018国产精品视频| 68精品久久久久久欧美| 亚洲国产精品字幕| 国产免费一区视频观看免费| 永久免费看mv网站入口亚洲| 日韩精品有码在线观看| 97婷婷涩涩精品一区| 国产中文字幕亚洲| 久久久久久久国产精品| 中日韩美女免费视频网站在线观看| 久久久久久这里只有精品| 久久久www成人免费精品| 国产精品免费一区豆花| 日韩av在线网址| 亚洲成人黄色网址| 亚洲最大福利视频| 国产精品自拍偷拍| 最新91在线视频| 欧日韩在线观看| 日韩av在线看| 色香阁99久久精品久久久| 色av中文字幕一区| 久久天天躁日日躁| 亚洲福利在线观看| 国内精品一区二区三区| 亚洲欧美日韩精品久久| 日韩欧美中文在线| 国产亚洲欧美aaaa| 色综合天天综合网国产成人网| 久久久久久久av| 亚洲人成77777在线观看网| 欧美在线视频免费播放| 精品国产一区二区三区久久久狼| 日韩美女av在线免费观看| 国产精品视频男人的天堂| 91av在线免费观看视频| 亚洲黄色成人网| 91精品在线观看视频| 亚洲成人黄色网址| 久久精品久久久久久国产 免费| 中文字幕亚洲欧美日韩在线不卡| 久久亚洲欧美日韩精品专区| 最近的2019中文字幕免费一页| 国产精品日韩欧美大师| 亚洲男人天堂古典| 国产精品成人va在线观看| 国产精品香蕉国产| 精品福利免费观看| 日韩av一区二区在线| 97在线观看视频| 久久精品国产亚洲精品| 日韩欧美中文字幕在线观看| 91精品国产色综合久久不卡98| 欧美精品久久久久久久| 国产亚洲欧洲高清一区| 久久免费国产精品1| 日韩综合视频在线观看| xxav国产精品美女主播| 国产精品直播网红| 国产欧美一区二区三区在线看| 国产精品国产三级国产aⅴ9色| 亚洲一区二区三区毛片| 中文字幕亚洲欧美日韩在线不卡| 色偷偷亚洲男人天堂| 国产综合在线看| 日韩在线欧美在线| 欧洲成人在线视频| 91极品视频在线| 最近中文字幕mv在线一区二区三区四区| 亚洲美女激情视频| 国产香蕉97碰碰久久人人| 国产午夜精品理论片a级探花| 成人亚洲欧美一区二区三区| 欧美日韩在线一区| 欧美贵妇videos办公室| 欧美黑人视频一区| 亚洲视频自拍偷拍| 精品综合久久久久久97| 久久成人一区二区| 国产欧美日韩综合精品| 日韩av快播网址| 亚洲美女av在线播放| 亚洲激情视频在线观看| 日韩精品极品在线观看播放免费视频| 一本一道久久a久久精品逆3p| 欧美在线影院在线视频| 国产在线精品成人一区二区三区| 日韩美女主播视频| 欧美成人免费观看| 日韩成人在线网站| 久久的精品视频| 国产成人精品视频| 6080yy精品一区二区三区| 亚洲深夜福利网站| 亚洲欧美国内爽妇网| 在线播放国产一区中文字幕剧情欧美| 亚洲成人久久一区| 久久香蕉频线观| 国产伦精品免费视频| 欧美精品videos另类日本| 久久中文字幕一区| 麻豆国产va免费精品高清在线| 国产欧美婷婷中文| xxxxx成人.com| 日韩av免费在线| 91久久精品在线| 欧美综合在线观看|