新手问题 关于 alipay 的问题

liuyang_1991 · 2017年07月11日 · 最后由 liuyang_1991 回复于 2018年03月18日 · 5324 次阅读

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

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

zqalyc 回复

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

liuyang_1991 回复

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

zqalyc 回复

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

用 openapi 分支了吗?贴代码

6 楼 已删除
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
Rei 回复

没用分支

这叹号让我不想回复。

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

Rei 回复

好的!谢谢!

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

jasl 回复

那我现在要怎么改,求教

liuyang_1991 回复

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

jasl 回复

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

liuyang_1991 回复

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

18 楼 已删除

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

Rei 回复

秘钥是改过的,谢谢。

Rei 回复

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

liuyang_1991 回复

Alipay::Client

Rei 回复

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

25 楼 已删除

哇,私钥贴论坛😂

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

这么写对吧?您给看下

lithium4010 回复

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

liuyang_1991 回复

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

Rei 回复

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

liuyang_1991 关闭了讨论。 07月14日 13:56
liuyang_1991 重新开启了讨论。 07月14日 14:04
Rei 回复

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

liuyang_1991 关闭了讨论。 07月14日 14:05
liuyang_1991 重新开启了讨论。 03月18日 21:20
liuyang_1991 关闭了讨论。 03月18日 21:20
liuyang_1991 重新开启了讨论。 03月18日 21:21
liuyang_1991 关闭了讨论。 03月18日 21:30
liuyang_1991 重新开启了讨论。 03月18日 21:30
40 楼 已删除
41 楼 已删除
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 分支,就没遇到过这个错误了,请问怎么回事,求解答

liuyang_1991 回复

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

Rei 回复

格式是对的

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

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

liuyang_1991 回复

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

Key 的开头格式就不对。

Rei 回复

👌试一下,感谢

liuyang_1991 关闭了讨论。 03月18日 22:17
需要 登录 后方可回复, 如果你还没有账号请 注册新账号