#coding:utf-8
class AlipayController < ApplicationController
#http://www.15-1688.com:3000/alipay/respond?trade_status=TRADE_FINISHED&is_success=T&out_trade_no=201012041246501110&trade_no=1111&total_fee=2020&fee_type=1&attach=&sign=3cc3b8c94797a5f4d060a1fdb95a0301
def return_url_process
dict={}
params.each do |k,v|
if k!="sign" and k!="sign_type" and k!="action" and k!="controller" and v!=""
dict[k]=v
end
end
logger.debug(dict)
gen_sign=AlipayLib::gen_sign(dict,"asdfasdfasdfasdfasdfasdfasdfasdfsadf")#密钥
logger.debug("-----------------------------------------------------------------")
logger.debug("gen_sign")
logger.debug(gen_sign)
pay_success=false
ps=PaymentStatus.new
ps.url=request.request_uri
ps.ip=request.remote_ip
ps.from="支付宝"
ps.memo="来自同步接口"
if gen_sign==params[:sign]
sn=params[:out_trade_no]
order=Order.find_by_sn(sn)
ps.order_id=order.id
if params[:trade_status]=="TRADE_FINISHED" or params[:trade_status]="TRADE_SUCCESS"
ps.name="付款成功"
ps.success=true
ps.transaction_id=params[:trade_no]
ps.sn=sn
ps.total_fee=params[:total_fee]
order.order_statuses<<OrderStatus.create(:name=>"订单确认",:value=>2)
pay_success=true
else
ps.name="付款未成功"
end
else
ps.name="签名不对"
logger.debug("签名不对")
end
ps.save
if pay_success
redirect_to "/pay_success"
else
redirect_to "/pay_failure"
end
end
#http://www.15-1688.com:3000/alipay/notify?trade_status=TRADE_FINISHED&is_success=T&out_trade_no=201012041246501110&trade_no=1111&total_fee=2020&fee_type=1&attach=&sign=3cc3b8c94797a5f4d060a1fdb95a0301
def notify_url_process
dict={}
params.each do |k,v|
if k!="sign" and k!="sign_type" and k!="action" and k!="controller" and v!=""
dict[k]=v
end
end
logger.debug(dict)
gen_sign=AlipayLib::gen_sign(dict,"sdafasdfasdfasdfasdfasdfadsfasdf")#密钥
logger.debug("-----------------------------------------------------------------")
logger.debug("gen_sign")
logger.debug(gen_sign)
pay_success=false
ps=PaymentStatus.new
ps.url=request.request_uri
ps.ip=request.remote_ip
ps.from="支付宝"
ps.memo="来自异步步接口"
if gen_sign==params[:sign]
sn=params[:out_trade_no]
order=Order.find_by_sn(sn)
ps.order_id=order.id
if params[:trade_status]=="TRADE_FINISHED" or params[:trade_status]="TRADE_SUCCESS"
ps.name="付款成功"
ps.success=true
ps.transaction_id=params[:trade_no]
ps.sn=sn
ps.total_fee=params[:total_fee]
order.order_statuses<<OrderStatus.create(:name=>"订单确认",:value=>2)
pay_success=true
else
ps.name="付款未成功"
end
else
ps.name="签名不对"
logger.debug("签名不对")
end
ps.save
if pay_success
render :text=>"success"
else
render :text=>"error"
end
end
end
模块代码
#coding:utf-8
require 'digest/md5'
require 'cgi'
module AlipayLib
def concat_url(dict)
list=[]
dict.each do |k,v|
list<<%Q{#{k}=#{CGI.escape(v)}}
end
url=list.join("&")
end
def gen_sign(dict,key)
Digest::MD5.hexdigest((dict.sort.collect{|s|s[0]+"="+s[1]}).join("&")+key)
end
def gen_url(subject,sn,total_fee,show_url,paymethod="bankPay",body=nil,it_b_pay=nil,defaultbank="",charset='utf-8')
dict={}
dict["service"]="create_direct_pay_by_user"
dict["payment_type"]="1"
dict["partner"]="208800323033"#partner_id
dict["seller_email"]="frederic2323@gmail.com"
dict["return_url"]="http://www.15-1688.com/alipay/respond"
dict["notify_url"]="http://www.15-1688.com/alipay/notify"
dict["_input_charset"]="utf-8"
dict["show_url"]=show_url
dict["out_trade_no"]=sn
dict["subject"]=subject
dict["body"]=body||""
dict["total_fee"]=total_fee.to_s
dict["paymethod"]=paymethod
dict["defaultbank"]=defaultbank
dict["anti_phishing_key"]=""
dict["exter_invoke_ip"]=""
dict["buyer_email"]=""
dict["extra_common_param"]=""
dict["royalty_type"]=""
dict["royalty_parameters"]=""
dict["it_b_pay"]=it_b_pay||""#此项功能需要申请开通
dict=dict.select{|k,v| !v.nil? and v.strip!=""}
dict["sign"]=gen_sign(dict,"dfasdfasdfasdfasdfasdfadfasdfadfsfd")#密钥
dict["sign_type"]="MD5"
puts dict["sign"]
params=concat_url(dict)
r="https://www.alipay.com/cooperate/gateway.do?"+params
puts r
puts "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
r
end
end
include AlipayLib
#gen_url("大家好","20101203111212",20.2,"directPay")
gen_url("大家","20101204121215","20.2","")
分享到:
相关推荐
Ruby for Rails 英文原版, pdf格式 <br>本书是一部专门为Rails实践而写的经典Ruby著作,由四部分组成,共17章。第一部分讲述Ruby和Rails的编程环境。第二部分和第三部分与 Rails紧密联系,着重对Ruby这门语言...
**Ruby for Rails** Ruby是一种面向对象的动态编程语言,它以其简洁、优雅的语法和强大的元编程能力而闻名。在Web开发领域,Ruby与Rails框架的结合,即Ruby on Rails(RoR),开创了Web应用的新纪元。Ruby on Rails...
OAuth gem for Rails3 是一个针对Ruby on Rails框架的授权库,它实现了OAuth协议,以便于在Rails应用中安全地处理第三方服务的授权流程。OAuth是一个开放标准,允许用户让第三方应用在无需分享用户名和密码的情况下...
“Rbuy for Rails源代码”这一标题表明我们关注的是一个名为“Rbuy”的项目,它是为Rails框架开发的一个特定组件或应用。Rails是Ruby on Rails的简称,是一个基于Ruby语言的开源Web应用程序框架,遵循MVC(模型-视图...
《Ruby on Rails for Dummies》是一本专门为初学者设计的Ruby on Rails教程,它旨在帮助新手快速理解并掌握这个强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby编程语言构建的一个开源Web应用程序框架,它...
Rails for Zombies是一份面向初学者的教程,通过学习本教程,用户能够掌握创建Ruby on Rails应用程序的基本知识。 Rails for Zombies教程中的"Deep in the CRUD"部分深入讲解了CRUD(创建Create、读取Retrieve、...
3. **变量引用**:Rails的实例变量可以在RJS模板中直接使用,使得数据传递更加方便。例如,`@users.each do |user|`可以用来遍历后端传来的用户数据,并更新到页面上。 4. **条件和循环**:Ruby的条件语句(如`if`...
### Agile Web Development with Rails for Rails 3.2 #### 核心知识点概览 - **Rails 3.2概述** - **敏捷开发方法论** - **Model-View-Controller (MVC) 模式** - **Ruby on Rails基础与高级特性** - **面向对象...
This book is for web developers who are getting started with Rails and are looking for authentication solutions, as well as for Rails developers who are looking to extend their implementation of ...
Bootstrap for Rails is for Rails web developers who are struggling to get their website designs right. It will enable you to create beautiful responsive websites in minutes without writing much CSS ...
[Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...
《Rails 3 in Action》是2011年由Ryan Bigg撰写的一本关于Ruby on Rails框架的权威指南,专门针对当时最新的Rails 3.1版本进行了深入解析。这本书旨在帮助开发者充分利用Rails 3.1的强大功能,提升Web应用开发的效率...
### Ruby for Rails 知识点概述 #### 一、书籍背景与重要性 - **书籍定位**:《Ruby for Rails》被广泛认为是学习Ruby语言的必读之作,特别是对于那些希望利用Ruby on Rails(RoR)进行高效Web开发的学习者而言。...
Rails3 是 Ruby on Rails 框架的一个版本,它提供了一系列强大的命令行工具,使得开发者可以快速地构建和管理Web应用。在本文中,我们将深入探讨Rails3中的常用命令,帮助你更高效地进行开发工作。 首先,新建一个...
3. **Gemfile和Bundler**:Rails项目中的`Gemfile`用于指定项目依赖的Gem(Ruby的库)。Bundler工具用于管理这些Gem,通过`bundle install`命令安装和更新Gem。 4. **路由**:Rails的路由系统将URL映射到控制器的...