新手问题 关于 alipay 的问题

liuyang_1991 · July 11, 2017 · Last by liuyang_1991 replied at March 18, 2018 · 5290 hits

移动支付,每次调支付宝接口的时候都显示创建交易异常,请重新创建后再付款!
mapi网关的RSA的公钥什么的都填了!哪位能告诉我到底怎么回事!
谢谢!

同一订单不能重复支付!订单 ID 重复,貌似也会出现这种情况

Reply to zqalyc

没有重复支付!现在是一次支付都没成功!

核对一下你的公钥和私钥,支付宝公钥以及自己的公私钥配置是否正确

Reply to zqalyc

都核对过了!是只配置这个的吧!

用 openapi 分支了吗?贴代码

6 Floor has deleted
Reply to Rei
  def alipay
    @payment=Payment.new(:user=>current_user, :channel=> :alipay, :amount=> params[:amount],
                         :subject=>params[:subject], :detail=>"[#{params[:subject]}]#{current_user.name}",
                         :out_order_id=>params[:order_id], :out_order_type=>params[:order_type])
    Payment.transaction do
      if @payment.save
        Alipay.pid = Setting.alipay["partner_id"]
        Alipay.sign_type="RSA"
        Alipay.key = <<-EOF
-----BEGIN PRIVATE KEY-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJfS4Xizv5pJdS/A
aVQFP1E0UsxVsKYQTsOR+vSlYvr2QU37h2OocmkYEM2NeKCuzeJ6QZ2lXaVR4KM/
hjK+cQZzlZ/RGEz6wAyiPBQpVQ9tDDo+FSPi+1txWdP4x+bt9iTvyAG/RCHSvkx/
CfFkgGqneliLIOOks4Ee0IfLNDnbAgMBAAECgYBKGpAazgFTWU9tg0rZm8YP6K4R
NjIGnCcVpgcLqj3pqJCvc3nd1rYhPbHV4ptiMnAjfvDP9YsDyjcO906VLgcUEonQ
8e1lf21cxCLLBrC3Z6OeXKIHRTDER1ammIAb6tC8IpO6XFeQATDtz1RWmjlRwRfz
Hin3zj3QSltnTHR5oQJBAMpRrVpIhACxpl7Q0xIpqSom4sY499SR0ImKR4gnMJrg
d5jDgULc5J/3jVn3wO0fkr+ZXfEfwJRL8QeBfPT80i0CQQDAG1wrd/sRqIDzClQg
MvABkTK3ZpfAPRkiTiP919Vigk3DebC6PC4dWlR6jtQfibkPFHPYnHm4CdfstAbm
gyknAkAR6ILor+yHRzJLyD42qFth8Mk39IjzVujXk9bbFWT3AJLgEcYaTgUqp7Xq
VcTM+HN75C5tjnr0ZXhzSqHt6YcNAkEAsR9IzwdTpMdRBUULpZhxc3B1a2WbGvL6
XoffZWd/5dCwdD+Z80wTVJr5cvqHmAB6cO3xldFH5KimviaKijR6VwJAEh+Lfjzc
vv/yNI0GOAIkp7ovIXVdmJ/+L+6f74bTrvXHIQJ90fHxlpg+dPiO1tymuwbIAV5R
z1vjmQIYCzYkTA==
-----END PRIVATE KEY-----
        EOF

        Alipay.debug_mode=true
        s=Alipay::Mobile::Service.mobile_securitypay_pay_string(
          :out_trade_no=> @payment.trade_number,
          :notify_url=>ERB::Util.url_encode("https://#{Setting.host}/pay_notify/alipay"),
          :subject=>@payment.subject,
          :total_fee=>@payment.amount,
          :body=>@payment.detail
        )
        render_json_success({:pay=>s})
      else
        render_logic_error"支付订单创建失败, 请稍后再试或联系客服"
      end

    end
  end
Reply to Rei

没用分支

这叹号让我不想回复。

Reply to Rei

息怒

Alipay::Mobile::Service 是老版接口,不是我开发的也无法调试,建议用 openapi 分支搭配新接口。

Reply to Rei

好的!谢谢!

Mobile 是我搞的,那套接口要单独申请的,但其实普通的那个接口,也支持移动环境的

Reply to jasl

那我现在要怎么改,求教

换成普通的接口好了,是叫 wap 吧,好久没搞,忘了

Reply to jasl

那个不是网页的么,也支持 APP?

app 的话,你让你公司申请一下去

18 Floor has deleted

现在接入就用新的了,还有沙盒环境。楼主密钥已泄漏,记得换一个。

Reply to Rei

秘钥是改过的,谢谢。

Reply to Rei

Alipay::App::Service 是这个么?

Alipay::Client

Reply to Rei

method: 'alipay.trade.page.pay', 这个填什么啊?

25 Floor has deleted

哇,私钥贴论坛😂

Reply to Rei
def alipay
  @payment=Payment.new(:user=>current_user, :channel=> :alipay, :amount=> params[:amount],
                       :subject=>params[:subject], :detail=>"[#{params[:subject]}]#{current_user.name}",
                       :out_order_id=>params[:order_id], :out_order_type=>params[:order_type])
  Payment.transaction do
    if @payment.save
     alipay_client = Alipay::Client.new(
          url: 'https://openapi.alipay.com/gateway.do',
          app_id:  '2017000000000000',
          app_private_key: APP_PRIVATE_KEY,
          alipay_public_key: ALIPAY_PUBLIC_KEY,
          format: 'json',
          charset: 'UTF-8',
          sign_type: 'RSA2'
      )
      s=alipay_client.sdk_execute(
           method: 'alipay.trade.app.pay',
           biz_content: {
               out_trade_no: @payment.trade_number,
               product_code: 'QUICK_MSECURITY_PAY',
               total_amount: @payment.amount,
               subject: @payment.subject
           }.to_json,
           timestamp: Time.now.to_formatted_s(:day_time)
      )

      render_json_success({:pay=>s})
    else
      render_logic_error"支付订单创建失败, 请稍后再试或联系客服"
    end


  end

这么写对吧?您给看下

Reply to lithium4010

帮看下,谢谢。报的错误是 Neither PUB key nor PRIV key: nested asn1 error 但是我用生成密钥的生成器,匹配密钥是匹配成功的。

在 ruby 里面要把支付宝公钥加上换行,每行长度参考自己的公钥。

Reply to Rei

长度 392,每行多少啊?在哪里有这个规定的资料啊?求告诉,谢谢

liuyang_1991 closed this topic. 14 Jul 13:56
liuyang_1991 reopened this topic. 14 Jul 14:04
Reply to Rei

弄好了,谢谢,就是没换行的问题

liuyang_1991 closed this topic. 14 Jul 14:05
liuyang_1991 reopened this topic. 18 Mar 21:20
liuyang_1991 closed this topic. 18 Mar 21:20
liuyang_1991 reopened this topic. 18 Mar 21:21
liuyang_1991 closed this topic. 18 Mar 21:30
liuyang_1991 reopened this topic. 18 Mar 21:30
40 Floor has deleted
41 Floor has deleted
Reply to Rei
module Alipay
  module Sign
    class RSA2
      def self.sign(key, string)
        rsa = OpenSSL::PKey::RSA.new(key)
        Base64.strict_encode64(rsa.sign('sha256', string))
      end

      def self.verify?(key, string, sign)
        rsa = OpenSSL::PKey::RSA.new(key)
        rsa.verify('sha256', Base64.strict_decode64(sign), string)
      end
    end
  end
end

大佬!rsa = OpenSSL::PKey::RSA.new(key) 传进私钥一直报错,是什么问题啊?

Neither PUB key nor PRIV key: nested asn1 error 之前也遇到过,但是上次你告诉我的 openapi 分支,就没遇到过这个错误了,请问怎么回事,求解答

看现在的 master 分支,文档里每个 key 有示例,看格式对不对。

Reply to Rei

格式是对的

Alipay::APP_PRIVATE_KEY = <<-EOF
-----BEGIN PRIVATE KEY-----
64string
p0b0nFOF5drEbEsqjw74Xqb4WPDC9Ac7P5zDZcW7+cgTsDWSgaGn
-----END PRIVATE KEY-----

rsa = OpenSSL::PKey::RSA.new(key) 这个没太懂,看源码,只能传 intger 和,pem 的

APP_PRIVATE_KEY="-----BEGIN *RSA* PRIVATE KEY-----\n

Key 的开头格式就不对。

Reply to Rei

👌试一下,感谢

liuyang_1991 closed this topic. 18 Mar 22:17
You need to Sign in before reply, if you don't have an account, please Sign up first.