Ruby Gem 简介:Credomatic Paycon 交互接口

需积分: 9 0 下载量 80 浏览量 更新于2024-10-24 收藏 9KB ZIP 举报
资源摘要信息:"simple_credomatic_paycon是一个Ruby Gem包,主要作用是作为Credomatic Paycon的简单包装器,方便Ruby开发者在自己的应用程序中与Credomatic Paycon进行交互。 Credomatic Paycon是一个在线支付处理服务,可以接受各种信用卡和借记卡的支付。通过使用simple_credomatic_paycon这个Gem包,开发者可以轻松地在其Ruby应用程序中添加支付处理功能。 要使用simple_credomatic_paycon,首先需要将其添加到你的Gemfile中,然后运行bundle命令进行安装。如果选择手动安装,也可以直接使用gem install simple_credomatic_paycon命令。 使用simple_credomatic_paycon时,首先需要创建一个SimpleCredomaticPaycon::Transaction对象,需要提供订单ID(orderid)、金额(amount)、信用卡号(ccnumber)、信用卡有效期(ccexp)、信用卡安全码(cvv)和用户名(username)等交易信息。 simple_credomatic_paycon虽然名为"简单包装器",但在实际使用时,开发者还是需要对其提供的方法和参数有深入的了解,以确保支付处理的安全性和稳定性。" 知识点详细说明: 1. Ruby Gem:Ruby Gem是一种Ruby库或包,用于在Ruby项目中添加新的功能和方法。简单来说,它是一个预先编写好的代码包,可以被Ruby项目导入和使用。 2. Credomatic Paycon:Credomatic Paycon是一个提供在线支付处理服务的平台,可以接受各种信用卡和借记卡的支付。 3. 在线支付处理:在线支付处理是指通过互联网完成的交易支付过程,包括信用卡支付、借记卡支付等多种形式。 4. 简单包装器:在这里,"简单包装器"指的是simple_credomatic_paycon这个Gem包,它将复杂的Credomatic Paycon接口封装成了一个简单的Ruby类,方便开发者使用。 5. Gemfile:Gemfile是Ruby项目中用于声明项目依赖的文件,所有需要的Gem包都在这里声明。可以通过运行bundle命令来安装Gemfile中声明的所有Gem包。 6. Bundle命令:bundle命令用于安装Gemfile中声明的所有Gem包。它会根据Gemfile中的依赖关系,自动安装并解决依赖问题。 7. Gem install命令:gem install命令用于手动安装一个指定的Ruby Gem包。 8. SimpleCredomaticPaycon::Transaction类:这是simple_credomatic_paycon提供的一个Ruby类,用于创建交易对象,表示一次在线支付交易。需要提供订单ID、金额、信用卡号、信用卡有效期、信用卡安全码和用户名等交易信息。 9. 交易信息:在线支付处理中,交易信息主要包括订单ID、金额、信用卡号、信用卡有效期、信用卡安全码和用户名等数据。 10. 安全性和稳定性:在使用simple_credomatic_paycon进行在线支付处理时,需要特别注意交易信息的安全性和支付处理的稳定性。需要注意不要泄露信用卡号等敏感信息,同时要确保支付处理过程中不会出现错误或异常。
2023-05-26 上传
2023-06-03 上传

代码解释:void CopleyAmplifier::SetNewPVTMotionStartTime(boost::posix_time::ptime time,CouchTrjType pvt_point) { //Record the time stamp and data. m_bool_pvt_started = true; m_start_motion_time_us = PosixTime2Integer<unsigned long long>(time); m_last_pvt_data.p = m_start_pos; //Send the last dummy data calculated by the motion start time. ptime current_time = microsec_clock::universal_time(); ptime couch_time = Integer2PosixTime<unsigned long long>(pvt_point.t, current_time); ptime couch_to_L1_time = Integer2PosixTime<unsigned long long>(pvt_point.timeReachToBuffer, current_time); unsigned char next_point_time = round((pvt_point.t-m_start_motion_time_us)/1000.0)-m_total_motion_time_ms; if(next_point_time<4) { GcLogInfo(m_log_id, __FUNCTION__, "<CopleyStartPVT>Motion start time:%s. First couch time:%s.First couch to L1 time:%s.", boost::posix_time::to_simple_string(time).c_str(), boost::posix_time::to_simple_string(couch_time).c_str(), boost::posix_time::to_simple_string(couch_to_L1_time).c_str()); GcLogInfo(m_log_id, __FUNCTION__, "next_point_time: %d.",next_point_time); BOOST_THROW_EXCEPTION(AxisException() <<Axis_Error_Msg("Start PVT time failed! No enough time for First PVT data!")); } AmpPVTData dummy_data = {next_point_time,0,0}; //Send the left dummy data. dummy_data.time = next_point_time; Gantry::Array seg_cmd = ComposePVTRawData(dummy_data,m_next_pvt_index,1); GcLogDebugExpect(m_need_trace, m_log_id, __FUNCTION__, "<CopleyStartPVT>The %dth PVT dummy data.", m_next_pvt_index); WriteSDO(Gantry::ODAddress(COPLEY_PVT_DATA, 0), (unsigned long long)seg_cmd.GetValue<unsigned long long>()); GcLogInfo(m_log_id, __FUNCTION__, "<CopleyStartPVT>Motion start time:%s. First couch time:%s.First couch to L1 time:%s.", boost::posix_time::to_simple_string(time).c_str(), boost::posix_time::to_simple_string(couch_time).c_str(), boost::posix_time::to_simple_string(couch_to_L1_time).c_str()); m_total_motion_time_ms += dummy_data.time; m_lasttrj_segments.push_back(seg_cmd.GetValue<unsigned long long>()); ++m_next_pvt_index; GcLogInfo(m_log_id, __FUNCTION__, "<CopleyStartPVT>Motion Started. Start position %f mm.", pvt_point.p); }

2023-07-14 上传