chengkun
2025-05-26 8f3df543230cd4403368b39b9bbe5726d11a0284
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
/**
 *类名:alipay_service
 *功能:支付宝外部服务接口控制
 *详细:该页面是请求参数核心处理文件,不需要修改
 *版本:3.1
 *修改日期:2010-07-26
 '说明:
 '以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
 '该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
 
*/
 
require_once("alipay_function.php");
 
class alipay_service {
 
    var $gateway;            //网关地址
    var $security_code;        //安全校验码
    var $mysign;            //加密结果(签名结果)
    var $sign_type;            //加密类型
    var $parameter;            //需要加密的参数数组
    var $_input_charset;    //字符编码格式
 
    /**构造函数
    *从配置文件及入口文件中初始化变量
    *$parameter 需要加密的参数数组
    *$security_code 安全校验码
    *$sign_type 加密类型
    */
    function alipay_service($parameter,$security_code,$sign_type) {
        $this->gateway          = "https://www.alipay.com/cooperate/gateway.do?";
        $this->security_code  = $security_code;
        $this->sign_type      = $sign_type;
        $this->parameter      = para_filter($parameter);
 
        //设定_input_charset的值,为空值的情况下默认为GBK
        if($parameter['_input_charset'] == '')
            $this->parameter['_input_charset'] = 'utf-8';
 
        $this->_input_charset   = $this->parameter['_input_charset'];
 
        //获得签名结果
        $sort_array   = arg_sort($this->parameter);    //得到从字母a到z排序后的加密参数数组
        $this->mysign = build_mysign($sort_array,$this->security_code,$this->sign_type);
    }
 
    /********************************************************************************/
 
    /**构造请求URL(GET方式请求)
    *return 请求url
     */
    function create_url() {
        $url         = $this->gateway;
        $sort_array  = array();
        $sort_array  = arg_sort($this->parameter);
        $arg         = create_linkstring_urlencode($sort_array);    //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
        
        //把网关地址、已经拼接好的参数数组字符串、签名结果、签名类型,拼接成最终完整请求url
        $url.= $arg."&sign=" .$this->mysign ."&sign_type=".$this->sign_type;
        return $url;
    }
 
    /********************************************************************************/
 
    /**构造Post表单提交HTML(POST方式请求)
    *return 表单提交HTML文本
     */
    function build_postform() {
 
        $sHtml = "<form id='alipaysubmit' name='alipaysubmit' action='".$this->gateway."_input_charset=".$this->parameter['_input_charset']."' method='post'>";
 
        while (list ($key, $val) = each ($this->parameter)) {
            $sHtml.= "<input type='hidden' name='".$key."' value='".$val."'/>";
        }
 
        $sHtml = $sHtml."<input type='hidden' name='sign' value='".$this->mysign."'/>";
        $sHtml = $sHtml."<input type='hidden' name='sign_type' value='".$this->sign_type."'/></form>";
 
        $sHtml = $sHtml."<input type='button' name='v_action' value='支付宝确认付款' onClick='document.forms[\"alipaysubmit\"].submit();'>";
        return $sHtml;
    }
    /********************************************************************************/
 
}
?>