`
zcq100
  • 浏览: 21472 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

ruby 建行支付接口

阅读更多

#by zcq100

require 'md5'

require "openssl"

 

module Payment::Cmb::Cmbpay

 

  # merchantid 商家编号

  #

  # posid 商户柜台代码

  #

  #branchid 分行代码

  #

  #orderid 由商户提供的订单号码,最长30位,按实际长度给出

  #

  #payment 由商户提供,最长30位,按实际长度给出

  #

  #curcode 交易币种,默认01(人民币)

  #

  #txcode 由建行统一分配为690401(企业账户)520100(个体账户)

  #

  #remark1 网银不处理,直接传到城综网

  #

  #remark2 网银不处理,直接传到城综网

  #

  #个体商户的url可以直接GET请求提交参数,如果是企业商户参数必须POST提交

  def pay(merchantid,posid,branchid,orderid,payment,curcode="01",txcode="520100",remark1="",remark2="")

    #参考发送的url

    #https://ibsbjstar.ccb.com.cn/app/ccbMain?MERCHANTID=123456789&POSID=000000000&BRANCHID=110000000&ORDERID=19991101234&PAYMENT=500.00&CURCODE=01&TXCODE=520100&REMARK1=&REMARK2=&MAC=qwertyuioplkjhgfdsazxcvbnm901234

    baseurl="https://ibsbjstar.ccb.com.cn/app/ccbMain"

    p=Hash.new

    p[:MERCHANTID]=merchantid

    p[:POSID]=posid

    p[:BRANCHID]=branchid

    p[:ORDERID]=orderid

    p[:PAYMENT]=payment

    p[:CURCODE]=curcode

    p[:TXCODE]=txcode

    p[:REMARK1]=remark1

    p[:REMARK2]=remark2

    #得到签名,签名是根据url和参数直接md5加密

    p[:MAC]=sign p

    url=baseurl+"?"+p.to_query()

  end

 

 

  #商家签名

  def sign params

    MD5.hexdigest(params.to_query())     

  end

 

  #根据银行返回的签名检查url是否被篡改

  def check_sign url

    public_key="这里是公匙"

    enctype=url.slice(url.rindex("&")+6,url.length);

    str=url.slice(0,url.rindex("&"))

    enctype_str=rsa_public_encrypt(str,public_key)

    if enctype==enctype_str

      return true

    else

      p "签名校验非法"

      return false

    end

  end

 

  #用公匙RSA签名参数

  def rsa_public_encrypt(value , public_key)

    rsa = OpenSSL::PKey::RSA.new(public_key)

    rsa.public_encrypt(value)

  end

end

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics