├── README.md ├── sql.txt ├── Pay ├── alpayqqpay │ └── alpayqqpay.php ├── alpaywxpay │ └── alpaywxpay.php └── alpayalipay │ └── alpayalipay.php └── tpl ├── alpayalipay.html ├── alpayqqpay.html └── alpaywxpay.html /README.md: -------------------------------------------------------------------------------- 1 | # zfaka-epay-sdk 2 | 3 | zfaka 的易支付接口 4 | 使用教程请查看https://alone88.cn -------------------------------------------------------------------------------- /sql.txt: -------------------------------------------------------------------------------- 1 | INSERT INTO `t_payment`( `payment`, `payname`, `payimage`, `alias`, `sign_type`) VALUES 2 | ('易支付支付宝', '支付宝', '/res/images/pay/alipay.jpg', 'alpayalipay', 'MD5'), 3 | ('易支付微信', '微信支付', '/res/images/pay/weixin.jpg', 'alpaywxpay', 'MD5'), 4 | ('易支付QQ', 'QQ支付', '/res/images/pay/qqpay.jpg', 'alpayqqpay', 'MD5'); -------------------------------------------------------------------------------- /Pay/alpayqqpay/alpayqqpay.php: -------------------------------------------------------------------------------- 1 | $payconfig['app_id'], 25 | //支付类型 26 | 'type' => 'qqpay', 27 | //系统订单号 28 | 'out_trade_no' => $params['orderid'], 29 | // 商品名称 30 | 'name' => $params['productname'], 31 | //商品金额 32 | 'money' => (float)$params['money'], 33 | //网站名称 34 | 'sitename' => $params['webname'], 35 | //异步通知地址 36 | 'notify_url' => $params['weburl'] . '/product/notify/?paymethod=' . $this->paymethod, 37 | //异步跳转地址 38 | 'return_url' => $params['weburl'] . "/query/auto/{$params['orderid']}.html" 39 | ); 40 | //排序数组 41 | $config = $this->argSort($config); 42 | // 转换成参数状态 43 | $prestr = $this->createLinkstring($config); 44 | //加上密钥 45 | $data = md5($prestr . $payconfig['app_secret']); 46 | $config['sign'] = $data; 47 | $config['sign_type'] = strtoupper('MD5'); 48 | 49 | //获取url 50 | $url = $payconfig['configure3'] . 'submit.php?' . $this->createLinkstring($config); 51 | if($url){ 52 | $result = array('type' => 1, 'subjump' => 0, 'paymethod' => $this->paymethod, 'url' => $url, 'payname' => $payconfig['payname'], 'overtime' => $payconfig['overtime'], 'money' => $params['money']); 53 | return array('code' => 1, 'msg' => 'success', 'data' => $result); 54 | }else{ 55 | return array('code'=>1001,'msg'=>'支付接口请求失败','data'=>''); 56 | } 57 | } catch (\Exception $e) { 58 | return array('code' => 1000, 'msg' => $e->getMessage(), 'data' => ''); 59 | } 60 | } 61 | 62 | //处理回调 63 | public function notify($payconfig) 64 | { 65 | try { 66 | //获取传入数据 67 | $params = $_GET; 68 | //去除空值和签名参数 69 | $params = $this->paraFilter($params); 70 | //排序 71 | $params = $this->argSort($params); 72 | //签名 73 | $md5Sigm = md5($this->createLinkstring($params) . $payconfig['app_secret']); 74 | // 验证签名数据 75 | if ($md5Sigm == $_GET['sign'] && $params['trade_status'] == 'TRADE_SUCCESS') { 76 | //成功 77 | //商户订单号 78 | $config = array('paymethod' => $this->paymethod, 'tradeid' => $params['trade_no'], 'paymoney' => $params['money'], 'orderid' => $params['out_trade_no']); 79 | $notify = new \Pay\notify(); 80 | $data = $notify->run($config); 81 | if ($data['code'] > 1) { 82 | return 'error|Notify: ' . $data['msg']; 83 | } else { 84 | return 'success'; 85 | } 86 | } else { 87 | return 'error|Notify: auth fail'; 88 | } 89 | 90 | } catch (\Exception $e) { 91 | file_put_contents(YEWU_FILE, CUR_DATETIME . '-' . $e->getMessage() . PHP_EOL, FILE_APPEND); 92 | exit; 93 | } 94 | } 95 | 96 | 97 | /** 98 | * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 99 | * @param $para 需要拼接的数组 100 | * return 拼接完成以后的字符串 101 | */ 102 | function createLinkstring($para) 103 | { 104 | $arg = ""; 105 | while (list ($key, $val) = each($para)) { 106 | $arg .= $key . "=" . $val . "&"; 107 | } 108 | //去掉最后一个&字符 109 | $arg = substr($arg, 0, count($arg) - 2); 110 | 111 | //如果存在转义字符,那么去掉转义 112 | if (get_magic_quotes_gpc()) { 113 | $arg = stripslashes($arg); 114 | } 115 | return $arg; 116 | } 117 | 118 | /** 119 | * 除去数组中的空值和签名参数 120 | * @param $para 签名参数组 121 | * return 去掉空值与签名参数后的新签名参数组 122 | */ 123 | function paraFilter($para) 124 | { 125 | $para_filter = array(); 126 | while (list ($key, $val) = each($para)) { 127 | if ($key == "sign" || $key == "sign_type" || $val == "" || $key == 'paymethod') continue; 128 | else $para_filter[$key] = $para[$key]; 129 | } 130 | return $para_filter; 131 | } 132 | /** 133 | * 对数组排序 134 | * @param $para 排序前的数组 135 | * return 排序后的数组 136 | */ 137 | function argSort($para) 138 | { 139 | ksort($para); 140 | reset($para); 141 | return $para; 142 | } 143 | } -------------------------------------------------------------------------------- /Pay/alpaywxpay/alpaywxpay.php: -------------------------------------------------------------------------------- 1 | $payconfig['app_id'], 26 | //支付类型 27 | 'type' => 'wxpay', 28 | //系统订单号 29 | 'out_trade_no' => $params['orderid'], 30 | // 商品名称 31 | 'name' => $params['productname'], 32 | //商品金额 33 | 'money' => (float)$params['money'], 34 | //网站名称 35 | 'sitename' => $params['webname'], 36 | //异步通知地址 37 | 'notify_url' => $params['weburl'] . '/product/notify/?paymethod=' . $this->paymethod, 38 | //异步跳转地址 39 | 'return_url' => $params['weburl'] . "/query/auto/{$params['orderid']}.html" 40 | ); 41 | //排序数组 42 | $config = $this->argSort($config); 43 | // 转换成参数状态 44 | $prestr = $this->createLinkstring($config); 45 | //加上密钥 46 | $data = md5($prestr . $payconfig['app_secret']); 47 | $config['sign'] = $data; 48 | $config['sign_type'] = strtoupper('MD5'); 49 | 50 | //获取url 51 | $url = $payconfig['configure3'] . 'submit.php?' . $this->createLinkstring($config); 52 | if($url){ 53 | $result = array('type' => 1, 'subjump' => 0, 'paymethod' => $this->paymethod, 'url' => $url, 'payname' => $payconfig['payname'], 'overtime' => $payconfig['overtime'], 'money' => $params['money']); 54 | return array('code' => 1, 'msg' => 'success', 'data' => $result); 55 | }else{ 56 | return array('code'=>1001,'msg'=>'支付接口请求失败','data'=>''); 57 | } 58 | } catch (\Exception $e) { 59 | return array('code' => 1000, 'msg' => $e->getMessage(), 'data' => ''); 60 | } 61 | } 62 | 63 | //处理回调 64 | public function notify($payconfig) 65 | { 66 | try { 67 | //获取传入数据 68 | $params = $_GET; 69 | //去除空值和签名参数 70 | $params = $this->paraFilter($params); 71 | //排序 72 | $params = $this->argSort($params); 73 | //签名 74 | $md5Sigm = md5($this->createLinkstring($params) . $payconfig['app_secret']); 75 | // 验证签名数据 76 | if ($md5Sigm == $_GET['sign'] && $params['trade_status'] == 'TRADE_SUCCESS') { 77 | //成功 78 | //商户订单号 79 | $config = array('paymethod' => $this->paymethod, 'tradeid' => $params['trade_no'], 'paymoney' => $params['money'], 'orderid' => $params['out_trade_no']); 80 | $notify = new \Pay\notify(); 81 | $data = $notify->run($config); 82 | if ($data['code'] > 1) { 83 | return 'error|Notify: ' . $data['msg']; 84 | } else { 85 | return 'success'; 86 | } 87 | } else { 88 | return 'error|Notify: auth fail'; 89 | } 90 | 91 | } catch (\Exception $e) { 92 | file_put_contents(YEWU_FILE, CUR_DATETIME . '-' . $e->getMessage() . PHP_EOL, FILE_APPEND); 93 | exit; 94 | } 95 | } 96 | 97 | 98 | /** 99 | * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 100 | * @param $para 需要拼接的数组 101 | * return 拼接完成以后的字符串 102 | */ 103 | function createLinkstring($para) 104 | { 105 | $arg = ""; 106 | while (list ($key, $val) = each($para)) { 107 | $arg .= $key . "=" . $val . "&"; 108 | } 109 | //去掉最后一个&字符 110 | $arg = substr($arg, 0, count($arg) - 2); 111 | 112 | //如果存在转义字符,那么去掉转义 113 | if (get_magic_quotes_gpc()) { 114 | $arg = stripslashes($arg); 115 | } 116 | return $arg; 117 | } 118 | 119 | /** 120 | * 除去数组中的空值和签名参数 121 | * @param $para 签名参数组 122 | * return 去掉空值与签名参数后的新签名参数组 123 | */ 124 | function paraFilter($para) 125 | { 126 | $para_filter = array(); 127 | while (list ($key, $val) = each($para)) { 128 | if ($key == "sign" || $key == "sign_type" || $val == "" || $key == 'paymethod') continue; 129 | else $para_filter[$key] = $para[$key]; 130 | } 131 | return $para_filter; 132 | } 133 | /** 134 | * 对数组排序 135 | * @param $para 排序前的数组 136 | * return 排序后的数组 137 | */ 138 | function argSort($para) 139 | { 140 | ksort($para); 141 | reset($para); 142 | return $para; 143 | } 144 | } -------------------------------------------------------------------------------- /Pay/alpayalipay/alpayalipay.php: -------------------------------------------------------------------------------- 1 | $payconfig['app_id'], 28 | //支付类型 29 | 'type' => 'alipay', 30 | //系统订单号 31 | 'out_trade_no' => $params['orderid'], 32 | // 商品名称 33 | 'name' => $params['productname'], 34 | //商品金额 35 | 'money' => (float)$params['money'], 36 | //网站名称 37 | 'sitename' => $params['webname'], 38 | //异步通知地址 39 | 'notify_url' => $params['weburl'] . '/product/notify/?paymethod=' . $this->paymethod, 40 | //异步跳转地址 41 | 'return_url' => $params['weburl'] . "/query/auto/{$params['orderid']}.html" 42 | ); 43 | //排序数组 44 | $config = $this->argSort($config); 45 | // 转换成参数状态 46 | $prestr = $this->createLinkstring($config); 47 | //加上密钥 48 | $data = md5($prestr . $payconfig['app_secret']); 49 | $config['sign'] = $data; 50 | $config['sign_type'] = strtoupper('MD5'); 51 | 52 | //获取url 53 | $url = $payconfig['configure3'] . 'submit.php?' . $this->createLinkstring($config); 54 | if($url){ 55 | $result = array('type' => 1, 'subjump' => 0, 'paymethod' => $this->paymethod, 'url' => $url, 'payname' => $payconfig['payname'], 'overtime' => $payconfig['overtime'], 'money' => $params['money']); 56 | return array('code' => 1, 'msg' => 'success', 'data' => $result); 57 | }else{ 58 | return array('code'=>1001,'msg'=>'支付接口请求失败','data'=>''); 59 | } 60 | } catch (\Exception $e) { 61 | return array('code' => 1000, 'msg' => $e->getMessage(), 'data' => ''); 62 | } 63 | } 64 | 65 | //处理回调 66 | public function notify($payconfig) 67 | { 68 | try { 69 | //获取传入数据 70 | $params = $_GET; 71 | //去除空值和签名参数 72 | $params = $this->paraFilter($params); 73 | //排序 74 | $params = $this->argSort($params); 75 | //签名 76 | $md5Sigm = md5($this->createLinkstring($params) . $payconfig['app_secret']); 77 | // 验证签名数据 78 | if ($md5Sigm == $_GET['sign'] && $params['trade_status'] == 'TRADE_SUCCESS') { 79 | //成功 80 | //商户订单号 81 | $config = array('paymethod' => $this->paymethod, 'tradeid' => $params['trade_no'], 'paymoney' => $params['money'], 'orderid' => $params['out_trade_no']); 82 | $notify = new \Pay\notify(); 83 | $data = $notify->run($config); 84 | if ($data['code'] > 1) { 85 | return 'error|Notify: ' . $data['msg']; 86 | } else { 87 | return 'success'; 88 | } 89 | } else { 90 | return 'error|Notify: auth fail'; 91 | } 92 | 93 | } catch (\Exception $e) { 94 | file_put_contents(YEWU_FILE, CUR_DATETIME . '-' . $e->getMessage() . PHP_EOL, FILE_APPEND); 95 | exit; 96 | } 97 | } 98 | 99 | 100 | /** 101 | * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 102 | * @param $para 需要拼接的数组 103 | * return 拼接完成以后的字符串 104 | */ 105 | function createLinkstring($para) 106 | { 107 | $arg = ""; 108 | while (list ($key, $val) = each($para)) { 109 | $arg .= $key . "=" . $val . "&"; 110 | } 111 | //去掉最后一个&字符 112 | $arg = substr($arg, 0, count($arg) - 2); 113 | 114 | //如果存在转义字符,那么去掉转义 115 | if (get_magic_quotes_gpc()) { 116 | $arg = stripslashes($arg); 117 | } 118 | return $arg; 119 | } 120 | 121 | /** 122 | * 除去数组中的空值和签名参数 123 | * @param $para 签名参数组 124 | * return 去掉空值与签名参数后的新签名参数组 125 | */ 126 | function paraFilter($para) 127 | { 128 | $para_filter = array(); 129 | while (list ($key, $val) = each($para)) { 130 | if ($key == "sign" || $key == "sign_type" || $val == "" || $key == 'paymethod') continue; 131 | else $para_filter[$key] = $para[$key]; 132 | } 133 | return $para_filter; 134 | } 135 | /** 136 | * 对数组排序 137 | * @param $para 排序前的数组 138 | * return 排序后的数组 139 | */ 140 | function argSort($para) 141 | { 142 | ksort($para); 143 | reset($para); 144 | return $para; 145 | } 146 | } 147 | -------------------------------------------------------------------------------- /tpl/alpayalipay.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 | 10 |
11 |
12 |
13 |

注意事项:

14 |

本支付接口同步支付回调地址(第一种):/product/query/?zlkbmethod=auto&paymethod=&orderid={订单号}

15 |

本支付接口同步支付回调地址(第二种):/query/auto/{订单号}.html

16 |

本支付接口异步支付回调地址:/product/notify/?paymethod=

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 | checked=""> 55 | checked=""> 56 |
57 |
58 |
59 | 60 |
61 | 62 |
63 |
64 |
65 | 66 | 67 | 68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | 76 | 77 | -------------------------------------------------------------------------------- /tpl/alpayqqpay.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 | 10 |
11 |
12 |
13 |

注意事项:

14 |

本支付接口同步支付回调地址(第一种):/product/query/?zlkbmethod=auto&paymethod=&orderid={订单号}

15 |

本支付接口同步支付回调地址(第二种):/query/auto/{订单号}.html

16 |

本支付接口异步支付回调地址:/product/notify/?paymethod=

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 | checked=""> 55 | checked=""> 56 |
57 |
58 |
59 | 60 |
61 | 62 |
63 |
64 |
65 | 66 | 67 | 68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | 76 | 77 | -------------------------------------------------------------------------------- /tpl/alpaywxpay.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 | 10 |
11 |
12 |
13 |

注意事项:

14 |

本支付接口同步支付回调地址(第一种):/product/query/?zlkbmethod=auto&paymethod=&orderid={订单号}

15 |

本支付接口同步支付回调地址(第二种):/query/auto/{订单号}.html

16 |

本支付接口异步支付回调地址:/product/notify/?paymethod=

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 | checked=""> 55 | checked=""> 56 |
57 |
58 |
59 | 60 |
61 | 62 |
63 |
64 |
65 | 66 | 67 | 68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | 76 | 77 | --------------------------------------------------------------------------------