`
lzqustc
  • 浏览: 211009 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

支付宝移动支付之服务端实现

    博客分类:
  • Perl
阅读更多

支付宝(蚂蚁金服)移动支付的交互流程请参考:https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103658&docType=1

 

和微信支付的流程大体一致,即:

1、客户端提交订单内容信息

2、服务端根据订单内容信息(可以根据业务需要添加额外信息,而且要指定notify_url地址),按照签名规则生成签名后的订单参数,返回给客户端。

注意:服务端只要负责生成签名后的订单参数,不需要请求支付宝服务器。

而微信支付过程,服务端事先要调统一下单获得预订单支付信息。

3、客户端调用支付接口(参数就是服务端返回的签名后的订单信息)完成支付。

4、服务端收到异步通知,完成相关业务逻辑。

 

# 订单参数举例:

{

    app_id : "2015052600090779",

    biz_content :{"timeout_express":"30m","seller_id":"","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.01","subject":"1","body":"我是测试数据","out_trade_no":"IQJZSRC1YMQB5HU"}

    charset : "utf-8",

    format : "json",

    method : "alipay.trade.app.pay",

    notify_url : "http://domain.merchant.com/payment_notify",

    sign_type : "RSA",

    timestamp : "2016-08-25 20:26:31",

    version : "1.0"

}

 

# 服务端签名函数:

use utf8;

use Time::Local;

use JSON;

use URI::Escape; #url编码

 

sub alipay_get_prepay {

    my $order_info = $_[0];

 

    # 组织订单参数

    my $total_amount = sprintf("%.2f", $order_info->{rmb}+0); #订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]

    my $PayInfo;

    $PayInfo->{app_id} = $ALIPAY_CONFIG->{appid};

    #$PayInfo->{biz_content} = {

    #   body=>"充值支付", #最大长度128

    #   out_trade_no=>$order_info->{_id}, #最大长度64

    #   product_code=>$ALIPAY_CONFIG->{product_code}, #销售产品码,商家和支付宝签约的产品码, 最大长度64

    #   subject=>$order_info->{order_id}, #最大长度256

    #   total_amount=>"$total_amount", #最大长度9

    #};

    $PayInfo->{biz_content} = '{"body":"RECHAGE","out_trade_no":"'.$order_info->{_id}.'", "product_code":"'.$ALIPAY_CONFIG->{product_code}.'", "subject":"'.$order_info->{order_id}.'","total_amount":"'.$total_amount.'"}';

 

    $PayInfo->{charset} = $ALIPAY_CONFIG->{charset};

    $PayInfo->{format} = "json";

    $PayInfo->{method} = $ALIPAY_CONFIG->{method};

    $PayInfo->{notify_url} = $P_NOTIFY_URL;

    $PayInfo->{sign_type} = $ALIPAY_CONFIG->{sign_type};

    $PayInfo->{timestamp} = formateTime(time());

    $PayInfo->{version} = "1.0";

    my $ret_sign = rsa_sign($PayInfo, $ALIPAY_CONFIG->{rsa_private_key});

    $PayInfo->{sign} = $ret_sign->{sign};

    

    #对所有value(biz_content作为一个value)进行url encode

    # 请求参数说明参考官网:https://doc.open.alipay.com/doc2/detail?treeId=59&articleId=103663&docType=1

    my $params_sign = {};

    foreach (keys %{$PayInfo}) {

        $params_sign->{$_} = uri_escape_utf8($PayInfo->{$_});

    }

    my $sign_string = join( '&', map { sprintf( '%s=%s', $_, $params_sign->{$_} ) } sort { $a cmp $b } keys %$params_sign );    # 构造签名后请求参数返回给客户端

    my $ret;

    $ret->{sign_str} = $sign_string;

    $ret->{unsign} = $ret_sign->{unsign};

    return $ret;

}

 

由于仅支持RSA或DSA的签名算法,而Perl语言尝试多次后都是签名错误,所以只好利用官方提供的Java例子,通过Perl命令行方式执行Java的RSA签名算法。具体如下:

支付宝签名规则参考:签名机制

sub rsa_sign {

    my ($params, $rsa_private_key)= @_;

    my $params_sign = {};

    foreach ( keys %$params ) {

        next if $_ eq 'sign';

        next unless defined $params->{$_};

        Encode::_utf8_off( $params->{$_} );

        $params_sign->{$_} = $params->{$_};

    }

 

    my $sign_string = join( '&',

                            map { sprintf( '%s=%s', $_, $params_sign->{$_} ) }

                            sort { $a cmp $b } keys %$params_sign );

    # 执行Java命令,得到签名结果

    my $file_path = "/var/www/app/";

    my $sign = `cd $file_path; java -cp . RSA '$rsa_private_key' '$sign_string '`;

    my $ret;

    $ret->{sign} = $sign;

    $ret->{unsign} = $sign_string;

    return $ret;

}

在/var/www/app/ 目录下需要有java的以下几个文件:

RSA.java 源文件;

以及 javac RSA.java 编译后的两个文件:

RSA$Base64.classRSA.class

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    支付宝支付-APP支付服务端代码下载

    支付宝支付-APP支付服务端代码是为实现移动应用与支付宝接口交互的重要组成部分,主要用于处理客户端发起的支付请求,确保交易安全、顺畅。本代码适用于使用Visual Studio 2010及更高版本,并要求.NET Framework 3.5...

    支付宝支付(服务端开发)

    服务端开发在实现支付宝支付过程中扮演着至关重要的角色,确保交易的安全性和稳定性。本教程将深入讲解服务端如何集成支付宝支付功能,主要涉及以下几个核心知识点: 1. **支付宝开放平台注册与接入**: 首先,你...

    易安卓支付宝服务端

    本压缩包文件“支付宝服务端”是针对易安卓平台的一个扩展,用于集成支付宝接口,实现移动支付功能。 在Android应用中集成支付宝服务端,通常涉及到以下几个关键知识点: 1. **支付接口集成**:易安卓支付宝服务端...

    支付宝移动支付官方DEMO及文档

    支付宝移动支付是阿里巴巴集团旗下支付宝公司为开发者提供的一种便捷的在线支付解决方案。官方DEMO和文档旨在帮助开发者快速理解和集成支付宝的移动支付功能,以便在自己的应用程序中实现安全、高效的支付流程。 1....

    支付宝集合mui调用h5+支付的服务端(旧版接口)

    在移动应用开发中,支付宝作为主流的支付平台之一,提供了丰富的SDK和服务端接口供开发者集成。本主题聚焦于“支付宝集合mui调用h5+支付的服务端(旧版接口)”,我们将详细介绍这个过程中的关键知识点。 1. **...

    支付宝移动支付 (php java .net)版

    该“支付宝移动支付 (php java .net)版”示例提供了服务端接口,适用于多种编程语言,包括PHP、Java和.NET,使得开发者能够轻松地将支付宝支付功能集成到自己的应用或网站中。 1. **移动支付**:移动支付是指通过...

    C++ 支付宝付款对接,支持回调url,实测可用!

    二维码支付是现代移动支付的一种常见方式,用户通过扫描商家展示的二维码完成支付。在C++中实现二维码支付,需要调用支付宝的生成二维码接口,生成包含支付信息的二维码图片,然后由用户使用支付宝App扫描。 ### 4....

    app支付宝 服务端demo

    在移动互联网时代,App支付已经成为日常生活中不可或缺的一部分。"app支付宝服务端demo"是一个实际测试过的服务端示例,旨在帮助开发者...同时,它也是一个很好的学习资源,帮助开发者提升在移动支付领域的专业技能。

    对接支付宝服务端代码

    6. **支付流程**: 用户发起支付请求,服务端调用支付宝的API生成预支付订单,返回给客户端(通常是前端或移动应用)一个支付二维码或H5支付链接。用户扫描或点击后,在支付宝客户端完成支付。支付成功后,支付宝会...

    EDKM+2.9支付宝服务端

    总的来说,EDKM+2.9支付宝服务端是一个帮助商家快速集成支付宝支付的工具,通过配置文件、使用说明和主程序文件,实现安全、高效的支付处理。在实际使用过程中,用户需要了解和遵循官方提供的配置指南,确保系统的...

    dotnet-支付宝PC网站支付Demo实现支付支付同步回调支付异步通知等

    支付宝PC网站支付Demo,实现支付、支付同步回调、支付异步通知、订单查询、退款、退款查询、订单关闭功能。采用支付宝服务端SDK:Alipay.AopSdk.Core,使用ASP.NET Core MVC 2.0。

    nodejs最新版支付宝app支付服务端,alipay-sdk,AlipayFormData,亲测通过,可以直接下载在项目中使用

    这个项目提供了Node.js的最新版本实现的支付宝App支付服务端接口,这对于我们处理线上交易,尤其是移动支付场景,非常实用。Alipay-SDK是支付宝提供的开发工具包,它包含了与支付宝接口交互所需的各种函数和类,简化...

    php 服务端集成支付宝APP支付实例

    在当今电子商务和移动支付越来越普及的背景下,支付宝作为国内领先的第三方支付平台之一,在线上交易中扮演了至关重要的角色。随着移动互联网的发展,越来越多的商户和开发者需要在自己的服务端集成支付宝的支付接口...

    移动智能终端开发--服务端实现(C语言).pptx

    * 移动支付:使用移动智能终端开发可以实现移动支付,例如微信支付、支付宝等。 * 在线教育:使用移动智能终端开发可以实现在线教育,例如在线课程、在线考试等。 * 健康管理:使用移动智能终端开发可以实现健康管理...

    扫码支付服务端

    扫码支付服务端是一种在线支付解决方案,它通过二维码技术实现了消费者扫描商家展示的二维码来完成交易。在当前数字化时代,扫码支付已经成为日常生活中不可或缺的一部分,尤其在中国,支付宝作为领军的移动支付平台...

    java实现微信支付宝支付

    本文将深入探讨如何使用Java语言来实现微信和支付宝的支付功能。这两个支付平台在中国市场占据主导地位,因此掌握它们的API接口和集成方法对于开发人员来说至关重要。 首先,让我们了解“Java实现微信支付宝支付”...

    支付宝App支付.docx

    $body = "支付宝移动支付测试 detail"; $total_fee = "0.01"; $out_trade_no = ""; //自己业务系统生成的交易 no $rsa_path = ""; //rsa 私钥路径 $notify_url = ""; //接收支付结果通知 url ``` 2. **调用...

    支付宝手机支付接口

    支付宝手机支付接口是移动应用中实现在线支付的关键技术,它允许用户通过智能手机便捷地完成交易。这个接口适用于Android和iOS两大主流操作系统,涵盖了客户端和服务器端的交互过程,确保了跨平台的兼容性和安全性。...

Global site tag (gtag.js) - Google Analytics