现在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
更多ECSHOP内容来自木庄网络博客
标签:ECSHOP
相关阅读 >>
分享微信扫码支付开发遇到问题及解决方案-附ECSHOP微信支付插件
更多相关阅读请进入《ECSHOP》频道 >>