- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是在 Ruby On Rails 3 测试环境中完成的,这是一个与生产环境相同的 MySQL 的 phusion 乘客。我使用了本教程:http://railscasts.com/episodes/142-paypal-notifications?autoplay=true从 paypal 获得 IPN 以通知我的应用程序付款结束。
我工作得很好,当我的测试设置完成结帐时,我可以在 Paypal 上看到我的购物车的内容,我登录到 paypal 沙盒帐户,paypal 通知我,我在我的数据库中创建了一个通知条目。
但是,如果我决定不使用 paypal 帐户而是使用支付卡进行支付,它会莫名其妙地失败。在日志上有来自 paypal 的答案,但我的应用程序从未创建 INSERT :
以下是 Paypal 用户通知的日志:
Started POST "/notification_paiements?secret=testsecret" for 173.0.82.126 at 2011-11-09 18:25:18 +0100
Processing by NotificationPaiementsController#create as HTML
Parameters: {"mc_gross"=>"287.04", "invoice"=>"36", "protection_eligibility"=>"Ineligible", "address_status"=>"unconfirmed", "item_number1"=>"1", "payer_id"=>"N9JJ8RH7BM8EU", "tax"=>"47.04", "address_street"=>"Av. de la Pelouse, 87648672 Mayet", "payment_date"=>"09:25:14 Nov 09, 2011 PST", "payment_status"=>"Completed", "charset"=>"windows-1252", "address_zip"=>"75002", "mc_shipping"=>"0.00", "mc_handling"=>"0.00", "first_name"=>"Test", "mc_fee"=>"10.01", "address_country_code"=>"FR", "address_name"=>"Test User", "notify_version"=>"3.4", "custom"=>"", "payer_status"=>"verified", "business"=>"syl_1315650606_biz@bellino.fr", "address_country"=>"France", "num_cart_items"=>"1", "mc_handling1"=>"0.00", "address_city"=>"Paris", "verify_sign"=>"AwOJnPNRFHZdnSqc35Btm-KkMwvbA-NWFOONFl0sDe.h8qfGzX3T3iVE", "payer_email"=>"sylvai_1320835836_per@bellino.fr", "mc_shipping1"=>"0.00", "txn_id"=>"67D29474V1031193M", "payment_type"=>"instant", "last_name"=>"User", "address_state"=>"Alsace", "item_name1"=>"Blopsters", "receiver_email"=>"syl_1315650606_biz@bellino.fr", "payment_fee"=>"", "quantity1"=>"2", "receiver_id"=>"VENU3QCG22URG", "txn_type"=>"cart", "mc_gross_1"=>"240.00", "mc_currency"=>"EUR", "residence_country"=>"FR", "test_ipn"=>"1", "transaction_subject"=>"Shopping CartBlopsters", "payment_gross"=>"", "ipn_track_id"=>"1HUPu0oG.fhexChWw61WQA", "secret"=>"testsecret"}
Collection Load (0.6ms) SELECT `collections`.* FROM `collections`
BijouType Load (0.2ms) SELECT `bijou_types`.* FROM `bijou_types`
SQL (0.2ms) BEGIN
AREL (0.6ms) INSERT INTO `carts` (`purchased_at`, `status`, `created_at`, `updated_at`) VALUES (NULL, 'Panier', '2011-11-09 17:25:18', '2011-11-09 17:25:18')
SQL (12.4ms) COMMIT
Before actualize
AREL (13.6ms) UPDATE `carts` SET `updated_at` = '2011-11-09 17:25:18' WHERE (`carts`.`id` = 37)
LineItem Load (0.6ms) SELECT `line_items`.* FROM `line_items` WHERE (`line_items`.cart_id = 37)
After actualize
SQL (0.2ms) BEGIN
SQL (0.7ms) describe `notification_paiements`
AREL (0.4ms) INSERT INTO `notification_paiements` (`params`, `cart_id`, `status`, `transaction_id`, `created_at`, `updated_at`) VALUES ('--- !map:ActiveSupport::HashWithIndifferentAccess \nmc_gross: \"287.04\"\ninvoice: \"36\"\nprotection_eligibility: Ineligible\naddress_status: unconfirmed\nitem_number1: \"1\"\npayer_id: N9JJ8RH7BM8EU\ntax: \"47.04\"\naddress_street: Av. de la Pelouse, 87648672 Mayet\npayment_date: 09:25:14 Nov 09, 2011 PST\npayment_status: Completed\ncharset: windows-1252\naddress_zip: \"75002\"\nmc_shipping: \"0.00\"\nmc_handling: \"0.00\"\nfirst_name: Test\nmc_fee: \"10.01\"\naddress_country_code: FR\naddress_name: Test User\nnotify_version: \"3.4\"\ncustom: \"\"\npayer_status: verified\nbusiness: syl_1315650606_biz@bellino.fr\naddress_country: France\nnum_cart_items: \"1\"\nmc_handling1: \"0.00\"\naddress_city: Paris\nverify_sign: AwOJnPNRFHZdnSqc35Btm-KkMwvbA-NWFOONFl0sDe.h8qfGzX3T3iVE\npayer_email: sylvai_1320835836_per@bellino.fr\nmc_shipping1: \"0.00\"\ntxn_id: 67D29474V1031193M\npayment_type: instant\nlast_name: User\naddress_state: Alsace\nitem_name1: Blopsters\nreceiver_email: syl_1315650606_biz@bellino.fr\npayment_fee: \"\"\nquantity1: \"2\"\nreceiver_id: VENU3QCG22URG\ntxn_type: cart\nmc_gross_1: \"240.00\"\nmc_currency: EUR\nresidence_country: FR\ntest_ipn: \"1\"\ntransaction_subject: Shopping CartBlopsters\npayment_gross: \"\"\nipn_track_id: 1HUPu0oG.fhexChWw61WQA\nsecret: testsecret\naction: create\ncontroller: notification_paiements\n', 36, 'Completed', '67D29474V1031193M', '2011-11-09 17:25:18', '2011-11-09 17:25:18')
SQL (3.3ms) COMMIT
Rendered text template (0.0ms)
Completed 200 OK in 96ms (Views: 20.4ms | ActiveRecord: 32.7ms)
如您所见,来自 paypal 的信息通过插入存储在 notification_paiements 表中。
现在一个非paypal用户unsing paypal支付:
Started POST "/notification_paiements?secret=testsecret" for 173.0.82.126 at 2011-11-09 18:39:01 +0100
Processing by NotificationPaiementsController#create as HTML
Parameters: {"mc_gross"=>"143.52", "invoice"=>"38", "protection_eligibility"=>"Ineligible", "address_status"=>"unconfirmed", "item_number1"=>"1", "payer_id"=>"TVV27PV4CE9WN", "tax"=>"23.52", "address_street"=>"1 Rue moli\xE8re", "payment_date"=>"09:28:02 Nov 09, 2011 PST", "payment_status"=>"Completed", "charset"=>"windows-1252", "address_zip"=>"06000", "mc_shipping"=>"0.00", "mc_handling"=>"0.00", "first_name"=>"Sylvain", "mc_fee"=>"5.13", "address_country_code"=>"FR", "address_name"=>"Sylvain Bellino", "notify_version"=>"3.4", "custom"=>"", "payer_status"=>"unverified", "business"=>"syl_1315650606_biz@bellino.fr", "address_country"=>"France", "num_cart_items"=>"1", "mc_handling1"=>"0.00", "address_city"=>"Quinper", "verify_sign"=>"AqbqXETD.PxAAbSmxayIN78tg6E5A8bGf00DQNeRfx1TbcIGu8oSrIKM", "payer_email"=>"test@test.com", "mc_shipping1"=>"0.00", "txn_id"=>"7L144405TP446563S", "payment_type"=>"instant", "last_name"=>"Bellino", "address_state"=>"", "item_name1"=>"Blopsters", "receiver_email"=>"syl_1315650606_biz@bellino.fr", "payment_fee"=>"", "quantity1"=>"1", "receiver_id"=>"VENU3QCG22URG", "txn_type"=>"cart", "mc_gross_1"=>"120.00", "mc_currency"=>"EUR", "residence_country"=>"FR", "test_ipn"=>"1", "receipt_id"=>"4652-2775-4616-8599", "transaction_subject"=>"Shopping CartBlopsters", "payment_gross"=>"", "ipn_track_id"=>"gfqdiv.LSFZQPO3RomLrBw", "secret"=>"testsecret"}
Collection Load (0.4ms) SELECT `collections`.* FROM `collections`
BijouType Load (0.1ms) SELECT `bijou_types`.* FROM `bijou_types`
SQL (0.1ms) BEGIN
SQL (0.7ms) SHOW TABLES
SQL (0.6ms) describe `carts`
AREL (0.6ms) INSERT INTO `carts` (`purchased_at`, `status`, `created_at`, `updated_at`) VALUES (NULL, 'Panier', '2011-11-09 17:39:01', '2011-11-09 17:39:01')
SQL (7.0ms) COMMIT
Before actualize
AREL (10.1ms) UPDATE `carts` SET `updated_at` = '2011-11-09 17:39:01' WHERE (`carts`.`id` = 45)
LineItem Load (0.7ms) SELECT `line_items`.* FROM `line_items` WHERE (`line_items`.cart_id = 45)
After actualize
SQL (0.2ms) BEGIN
SQL (0.1ms) ROLLBACK
Completed in 134ms
当它应该在数据库中创建条目时发生某种回滚。
Controller 的代码相当简单:
class NotificationPaiementsController < ApplicationController
protect_from_forgery :except =>[:create]
skip_before_filter :authorize, :only => [:create]
def create
@notification_paiement = NotificationPaiement.create!(:params => params,
:cart_id => params[:invoice],
:status=> params[:payment_status], :transaction_id => params[:txn_id])
render :nothing=>true
end
end
在创建方法中发生了一些阻止记录某些通知的事情,但是什么?有没有办法拥有更冗长的创建方法?
最佳答案
问题出在像 : é 这样的特殊字符上
该应用程序是完整的 UTF-8(包括 mysql UTF-8 兼容的 ruby 驱动程序和 UTF-8 中的 MySQL)。
要在 utf 8 中设置 IPN,请执行以下操作:
ic = Iconv.new('UTF-8//IGNORE', 'UTF-8')
vparams = {}
params.each do |k,v|
vparams[k]=v.force_encoding('ISO-8859-1').encode!('UTF-8')
end
关于ruby-on-rails - 我收到了 Paypal IPN 罚款,但我的应用程序仅在从 paypal 帐户完成时才记录它。由 UTF-8/ISO-8859-1 引起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8069449/
从 Redis 获取消息时,onDone:(){print('done')} 从未起作用。 import 'package:dartis/dartis.dart' as redis show PubS
昨天我玩了一些vim脚本,并设法通过循环来对当前输入的内容进行状态栏预测(请参见屏幕截图(灰色+黄色栏))。 问题是,我不记得我是怎么得到的,也找不到我用于该vim魔术的代码片段(我记得它很简单):它
我尝试加载 bash_completion在我的 bash (3.2.25) 中,它不起作用。没有消息等。我在我的 .bashrc 中使用了以下内容 if [ -f ~/.bash_completio
我正在尝试构建一个 bash 完成例程,它将建议命令行标志和合适的标志值。例如在下面 fstcompose 命令我想比赛套路先建议 compose_filter= 标志,然后建议来自 [alt_seq
当我尝试在重定向符号后完成路径时,bash 完成的行为就好像它仍在尝试在重定向之前完成命令的参数一样。 例如: dpkg -l > /med标签 通过在 /med 之后点击 Tab我希望它完成通往 /
我的类中有几个 CAKeyframeAnimation 对象。 他们都以 self 为代表。 在我的animationDidStop函数中,我如何知道调用来自哪里? 是否有任何变量可以传递给 CAKe
我有一个带有 NSDateFormatter 的 NSTextField。格式化程序接受“mm/dd/yy”。 可以自动补全日期吗?因此,用户可以输入“mm”,格式化程序将完成当前月份和年份。 最佳答
有一个解决方案可以使用以下方法完成 NSTextField : - (NSArray *)control:(NSControl *)control textView:(NSTextView *)tex
我正在阅读 Passport 的文档,我注意到 serialize()和 deserialize() done()被调用而不被返回。 但是,当使用 passport.use() 设置新策略时在回调函数
在 ubuntu 11.10 上的 Firefox 8.0 中,尽管 img.complete 为 false,但仍会调用 onload 函数 draw。我设法用 setTimeout hack 解决
假设我有两个与两个并行执行的计算相对应的 future 。我如何等到第一个 future 准备好?理想情况下,我正在寻找类似于Python asyncio's wait且参数为return_when=
我正在寻找一种 Java 7 数据结构,其行为类似于 java.util.Queue,并且还具有“最终项目已被删除”的概念。 例如,应可以表达如下概念: while(!endingQueue.isFi
这是一个简单的问题。 if ($('.dataTablePageList')) { 我想做的是执行一个 if 语句,该语句表示如果具有 dataTablesPageList 类的对象也具有 menu
我用replaceWith批量替换了许多div中的html。替换后,我使用 jTruncate 来截断文本。然而它不起作用,因为在执行时,replaceWith 还没有完成。 我尝试了回调技巧 ( H
有没有办法调用 javascript 表单 submit() 函数或 JQuery $.submit() 函数并确保它完成提交过程?具体来说,在一个表单中,我试图在一个 IFrame 中提交一个表单。
我有以下方法: function animatePortfolio(fadeElement) { fadeElement.children('article').each(function(i
我刚刚开始使用 AndEngine, 我正在像这样移动 Sprite : if(pValueY < 0 && !jumping) { jumping =
我正在使用 asynctask 来执行冗长的操作,例如数据库读取。我想开始一个新 Activity 并在所有异步任务完成后呈现其内容。实现这一目标的最佳方法是什么? 我知道 onPostExecute
我有一个脚本需要命令名称和该命令的参数作为参数。 所以我想编写一个完成函数来完成命令的名称并完成该命令的参数。 所以我可以这样完成命令的名称 if [[ "$COMP_CWORD" == 1 ]];
我的应用程序有一个相当奇怪的行为。我在 BOOT_COMPLETE 之后启动我的应用程序,因此在我启动设备后它是可见的。 GUI 响应迅速,一切正常,直到我调用 finish(),按下按钮时,什么都没
我是一名优秀的程序员,十分优秀!