├── apk-http └── gogo.apk ├── apk-https └── gogo.apk ├── gogozhifu-asp-demo ├── return.asp ├── notify.asp ├── pay.asp └── md5.asp ├── gogozhifu-ecshop ├── 使用说明.txt ├── images │ └── pay_logo │ │ ├── gogozhifuwx.jpg │ │ └── gogozhifuzfb.jpg ├── mobile │ ├── lang │ │ └── payment │ │ │ ├── gogowx.php │ │ │ └── gogozfb.php │ └── include │ │ └── modules │ │ └── payment │ │ ├── gogowx.php │ │ └── gogozfb.php ├── languages │ └── zh_cn │ │ └── payment │ │ ├── gogozhifuwx.php │ │ └── gogozhifuzfb.php └── includes │ └── modules │ └── payment │ ├── gogozhifuzfb.php │ └── gogozhifuwx.php ├── gogozhifu_Cscms ├── 使用说明.txt ├── cscms │ └── config │ │ └── sys │ │ └── Cs_Pay.php ├── plugins │ └── sys │ │ ├── pay │ │ └── Ggzf.php │ │ ├── user │ │ └── Pay.php │ │ └── admin │ │ └── Pay.php └── tpl │ └── admin │ └── sys │ └── pay_setting.html ├── gogozhifu-demo-php ├── return.php ├── notify.php └── pay.php ├── gogozhifu-maccms ├── 使用说明.txt ├── application │ ├── admin │ │ └── view │ │ │ └── extend │ │ │ └── pay │ │ │ └── gogozhifu.html │ ├── index │ │ └── controller │ │ │ └── Go.php │ └── common │ │ └── extend │ │ └── pay │ │ └── Gogozhifu.php └── template │ ├── default-wap │ └── html │ │ └── user │ │ └── pay.html │ └── default-pc │ └── html │ └── user │ └── pay.html ├── gogozhifu-demo-java ├── NotifyParams.java ├── PayParams.java ├── HttpUtils.java └── GoGoZhiFu.java ├── README.md └── gogozhifu-demo-python └── gogozhifu-demo-python.py /apk-http/gogo.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gogozhifu/code-demo-plugin/HEAD/apk-http/gogo.apk -------------------------------------------------------------------------------- /apk-https/gogo.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gogozhifu/code-demo-plugin/HEAD/apk-https/gogo.apk -------------------------------------------------------------------------------- /gogozhifu-asp-demo/return.asp: -------------------------------------------------------------------------------- 1 | <% 2 | response.write("you paid success!!! this is return page.") 3 | %> -------------------------------------------------------------------------------- /gogozhifu-ecshop/使用说明.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gogozhifu/code-demo-plugin/HEAD/gogozhifu-ecshop/使用说明.txt -------------------------------------------------------------------------------- /gogozhifu_Cscms/使用说明.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gogozhifu/code-demo-plugin/HEAD/gogozhifu_Cscms/使用说明.txt -------------------------------------------------------------------------------- /gogozhifu-demo-php/return.php: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /gogozhifu-ecshop/images/pay_logo/gogozhifuwx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gogozhifu/code-demo-plugin/HEAD/gogozhifu-ecshop/images/pay_logo/gogozhifuwx.jpg -------------------------------------------------------------------------------- /gogozhifu-ecshop/images/pay_logo/gogozhifuzfb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gogozhifu/code-demo-plugin/HEAD/gogozhifu-ecshop/images/pay_logo/gogozhifuzfb.jpg -------------------------------------------------------------------------------- /gogozhifu-ecshop/mobile/lang/payment/gogowx.php: -------------------------------------------------------------------------------- 1 | GOGO支付 - 更好的个人支付解决方案。
免费注册使用、个人免签约、无手续费、免挂机、实时回调。'; 13 | $_LANG['gogowx_account'] = '支付宝帐户'; 14 | 15 | $_LANG['gogowx_appid'] = '商户ID(APP_ID)'; 16 | $_LANG['gogowx_appsecret'] = '商户密钥(APP_SECRET)'; 17 | $_LANG['pay_button'] = '立即支付'; 18 | 19 | ?> -------------------------------------------------------------------------------- /gogozhifu-ecshop/mobile/lang/payment/gogozfb.php: -------------------------------------------------------------------------------- 1 | GOGO支付 - 更好的个人支付解决方案。
免费注册使用、个人免签约、无手续费、免挂机、实时回调。'; 13 | $_LANG['gogozfb_account'] = '支付宝帐户'; 14 | 15 | $_LANG['gogozfb_appid'] = '商户ID(APP_ID)'; 16 | $_LANG['gogozfb_appsecret'] = '商户密钥(APP_SECRET)'; 17 | $_LANG['pay_button'] = '立即使用支付宝支付'; 18 | 19 | ?> -------------------------------------------------------------------------------- /gogozhifu-maccms/使用说明.txt: -------------------------------------------------------------------------------- 1 | /** 2 | * GOGO支付 - 更好的个人支付解决方案 3 | * 免费注册使用、个人免签约、无手续费、实时回调 4 | * https://www.gogozhifu.com 5 | * WX: gump994 6 | * QQ: 653107385 7 | */ 8 | 9 | 苹果CMSV10接入GOGO支付实现个人支付宝、微信收款实时回调 - 使用说明 10 | 11 | 使用步骤: 12 | 1.把template文件夹下的default-pc(移动端模板default-wap)改成你自己使用的模板目录名(如果你使用的是默认模板,可跳过这步)。 13 | 2.把所有文件拷贝到你的苹果CMS项目根目录下 (可以事先备份一下自己的html/user/pay.html文件,会覆盖。) 14 | 3.登录后台 - 系统 - 在线支付配置,找到GOGO支付配置(没有GOGO支付商户帐号的直接跳转官网免费注册一个即可) 15 | 4.填入APPID和APPSecret,设置支付方式(1:微信;2:支付宝;多个用逗号分隔,例如:1,2) 16 | 5.大功告成!去支付试试吧! 17 | 18 | 其他说明: 19 | 1.GOGO支付开通后要上传一下自己的个人收款码 20 | 2.GOGO支付支持自行挂机监听收款和云端免挂机两种模式,具体的内容参考官网文档或联系客服。 21 | -------------------------------------------------------------------------------- /gogozhifu-ecshop/languages/zh_cn/payment/gogozhifuwx.php: -------------------------------------------------------------------------------- 1 | 2 | <% 3 | '支付成功异步回调接口 4 | appid = "这里填入您的GOGO支付APPID" 'GOGO支付商户APP_ID 5 | appsecret = "这里填入您的GOGO支付APPSECRET" 'GOGO支付商户APP_SECRET 6 | '接收参数 7 | payId=Request.QueryString("payId") 8 | param=Request.QueryString("param") 9 | payType=Request.QueryString("type") 10 | price=Request.QueryString("price") 11 | reallyPrice=Request.QueryString("reallyPrice") 12 | sign=Request.QueryString("sign") 13 | 14 | 'md5加密生成sign 15 | set md5 = new md5utf8 16 | mySign = md5(appid&payId¶m&payType&price&reallyPrice&appsecret) 17 | '与请求里的sign进行对比校验 18 | if sign=mySign then 19 | '签名校验成功,处理商户业务逻辑 20 | 'TODO:在这里写支付成功后的逻辑代码 21 | '该接口需要支持多次访问调用,根据自身业务设置好状态判断,避免订单被二次更新而出错 22 | else 23 | response.Write("error_sign") 24 | end if 25 | response.Write("success") 26 | %> -------------------------------------------------------------------------------- /gogozhifu-demo-php/notify.php: -------------------------------------------------------------------------------- 1 | 自定义参数:" . $param . "
支付方式:" . $type . "
订单金额:" . $price . "
实际支付金额:" . $reallyPrice; 25 | ?> -------------------------------------------------------------------------------- /gogozhifu_Cscms/cscms/config/sys/Cs_Pay.php: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | GOGO支付设置 5 | - 免费注册使用、免签约、无手续费 - 6 | 点击进入商户后台 7 | 8 |
9 | 10 |
11 | 12 |
13 | 14 |
15 |
16 |
17 | 18 |
19 | 20 |
21 |
22 |
23 | 24 |
25 | 26 |
27 |
1:微信;2:支付宝;(多个用逗号分隔)
28 |
29 | -------------------------------------------------------------------------------- /gogozhifu-demo-java/NotifyParams.java: -------------------------------------------------------------------------------- 1 | /* GOOG支付接入示例代码 - JAVA版本 */ 2 | /* 更多信息请前往官网:https://www.gogozhifu.com */ 3 | 4 | public class NotifyParams { 5 | private String payId; 6 | private String param; 7 | private String type; 8 | private String price; 9 | private String reallyPrice; 10 | private String sign; 11 | 12 | public NotifyParams() { 13 | } 14 | 15 | public NotifyParams(String payId, String param, String type, String price, String reallyPrice) { 16 | this.payId = payId; 17 | this.param = param; 18 | this.type = type; 19 | this.price = price; 20 | this.reallyPrice = reallyPrice; 21 | } 22 | 23 | public void setPayId(String payId) { 24 | this.payId = payId; 25 | } 26 | 27 | public String getPayId() { 28 | return payId; 29 | } 30 | 31 | public void setType(String type) { 32 | this.type = type; 33 | } 34 | 35 | public String getType() { 36 | return type; 37 | } 38 | 39 | public void setParam(String param) { 40 | this.param = param; 41 | } 42 | 43 | public String getParam() { 44 | return param; 45 | } 46 | 47 | public void setPrice(String price) { 48 | this.price = price; 49 | } 50 | 51 | public String getPrice() { 52 | return price; 53 | } 54 | 55 | public void setReallyPrice(String reallyPrice) { 56 | this.reallyPrice = reallyPrice; 57 | } 58 | 59 | public String getReallyPrice() { 60 | return reallyPrice; 61 | } 62 | 63 | public void setSign(String sign) { 64 | this.sign = sign; 65 | } 66 | 67 | public String getSign() { 68 | return sign; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 个人免签支付系统 - 接入源码插件资源汇总 - [GOGO支付 ](https://www.gogozhifu.com) 2 | 3 | ### 个人支付宝/微信,免签约、免备案、免费注册立即使用! 4 | ### 无手续费,云端监听免挂机,收款实时回调,资金直达个人账户! 5 | 6 |
7 | 8 | > ### **源码、插件资源目录如下** 9 | | 文件名 | 资源名 | 10 | |---------|---------| 11 | | apk-http | 监控端APP(http请求) | 12 | | apk-https | 监控端APP(https请求) | 13 | | gogozhifu-demo-java | JAVA接入DEMO | 14 | | gogozhifu-demo-php | PHP接入DEMO | 15 | | gogozhifu-maccms | 苹果CMSV10插件 | 16 | | gogozhifu_Cscms | Cscms4.2插件 | 17 | | gogozhifu-ecshop | ecshop个人支付 | 18 | 19 | 20 |
21 | 22 | > ### **GOGO支付功能特性** 23 | 24 | 1. 自行挂机模式:利用APP监听收款消息,实现收款回调,安卓手机/模拟器,无需ROOT 25 | 2. 云端监听免挂机:支付宝采用抓包技术云端调用官方接口,微信支付采用安卓底层HOOK技术获取收款信息。监听效率非常高、而且很稳定! 26 | 3. 下单支付成功通知消息、收款码自动轮询切换 27 | 4. 更多功能欢迎自行体验。。。 28 | ![GOGO支付后台](https://images.gitee.com/uploads/images/2021/0813/180634_912f9a84_1694370.png "微信截图_20210714143019.png") 29 | 30 |
31 | 32 | 33 | > ### **GOGO支付个人免签支付系统实现原理说明** 34 | 35 | 36 | 1. 商户调起GOGO支付下单接口,生成一笔交易订单 37 | 2. 用户扫码支付,监听端获取到最新支付数据,匹配到对应订单 38 | 3. 回调通知商户,处理后续业务逻辑 39 | 40 |
41 | 42 | > ### **GOGO支付与其他支付平台的对比** 43 | 44 | 45 | | 对比 | 其他支付系统 | GOGO支付 | 46 | |---------|---------|--------------| 47 | | 申请备案、签约 | 需要,很麻烦 | 不需要 | 48 | | 开户费 | 需要,很贵 | 不需要 | 49 | | 手续费 | 需要,很高 | 不需要 | 50 | | 安全性 | 有平台跑路风险 | 资金直达个人账户,无风险 | 51 | | 收款回调效率 | 参差不齐 | 毫秒级响应,[立即体验 ](https://www.gogozhifu.com/shop/test/makeorder/type/1.html) | 52 | 53 | 54 |
55 | 56 | > ### **相关资料、联系方式** 57 | - GOGO支付官网:https://www.gogozhifu.com/ 58 | - 开发接入文档:https://www.gogozhifu.com/develop.html 59 | - QQ: 653107385 60 | - 微信:gump994 61 | - 邮箱:gogozhifu@qq.com 62 | 63 | 64 |
65 | 66 | ### 希望可以帮助到更多的网站站长、互联网创业者们~加油! 67 | 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /gogozhifu-demo-java/PayParams.java: -------------------------------------------------------------------------------- 1 | /* GOOG支付接入示例代码 - JAVA版本 */ 2 | /* 更多信息请前往官网:https://www.gogozhifu.com */ 3 | 4 | public class PayParams { 5 | private String price; //必填 6 | private String type; //必填 7 | private String payId; //必填 8 | private String sign; //必填 9 | private String param; //选填 10 | private String notifyUrl; //选填 11 | private String returnUrl; //选填 12 | private String isHtml; //选填 13 | 14 | public void setPrice(String price) { 15 | this.price = price; 16 | } 17 | 18 | public String getPrice() { 19 | return price; 20 | } 21 | 22 | public void setType(String type) { 23 | this.type = type; 24 | } 25 | 26 | public String getType() { 27 | return type; 28 | } 29 | 30 | public void setPayId(String payId) { 31 | this.payId = payId; 32 | } 33 | 34 | public String getPayId() { 35 | return payId; 36 | } 37 | 38 | public void setParam(String param) { 39 | this.param = param; 40 | } 41 | 42 | public String getParam() { 43 | return param; 44 | } 45 | 46 | public void setSign(String sign) { 47 | this.sign = sign; 48 | } 49 | 50 | public String getSign() { 51 | return sign; 52 | } 53 | 54 | public void setReturnUrl(String returnUrl) { 55 | this.returnUrl = returnUrl; 56 | } 57 | 58 | public String getReturnUrl() { 59 | return returnUrl; 60 | } 61 | 62 | 63 | public void setNotifyUrl(String notifyUrl) { 64 | this.notifyUrl = notifyUrl; 65 | } 66 | 67 | public String getNotifyUrl() { 68 | return notifyUrl; 69 | } 70 | 71 | public void setReturnUrl(String returnUrl) { 72 | this.returnUrl = returnUrl; 73 | } 74 | 75 | public String getReturnUrl() { 76 | return returnUrl; 77 | } 78 | 79 | public void setIsHtml(String isHtml) { 80 | this.isHtml = isHtml; 81 | } 82 | 83 | public String getIsHtml() { 84 | return isHtml; 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /gogozhifu-demo-php/pay.php: -------------------------------------------------------------------------------- 1 | $payId, 27 | 'param' => $param, 28 | 'type' => $type, 29 | 'price' => $price, 30 | 'sign' => $sign, 31 | 'notifyUrl' => $notifyUrl, 32 | 'returnUrl' => $returnUrl, 33 | 'isHtml' => 1 34 | ); 35 | $ret = goPost($apiUrl, $data); 36 | echo $ret; 37 | } 38 | 39 | // 必需,填入商户自己的AppId 40 | function getAppId() 41 | { 42 | return "填入GOOG支付商户自己的AppId"; 43 | } 44 | 45 | // 必需,填入商户自己的AppSecret 46 | function getAppSecret() 47 | { 48 | return "填入GOOG支付商户自己的AppSecret"; 49 | } 50 | 51 | // 发起POST请求,请求头里必须设置商户的App-Id和App-Secret 52 | function goPost($url, $data) 53 | { 54 | $headerArray = [ 55 | "App-Id: " . getAppId(), 56 | "App-Secret: " . getAppSecret(), 57 | ]; 58 | $curl = curl_init(); 59 | curl_setopt($curl, CURLOPT_URL, $url); 60 | curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 61 | curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); 62 | curl_setopt($curl, CURLOPT_POST, 1); 63 | curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 64 | curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray); 65 | curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 66 | $output = curl_exec($curl); 67 | curl_close($curl); 68 | return $output; 69 | } 70 | 71 | ?> 72 | -------------------------------------------------------------------------------- /gogozhifu-asp-demo/pay.asp: -------------------------------------------------------------------------------- 1 | 2 | <% 3 | res = gogozhifu("1", "0.08") 4 | response.write(res) 5 | 6 | 7 | '调用GOGO支付下单接口, payType支付类型 1微信,2支付宝, price付款金额 8 | Function gogozhifu(payType, price) 9 | appid = "这里填入您的GOGO支付APPID" 'GOGO支付商户APP_ID 10 | appsecret = "这里填入您的GOGO支付APPSECRET" 'GOGO支付商户APP_SECRET 11 | apiUrl = "https://www.gogozhifu.com/shop/api/createOrder" 'api接口地址 12 | payId = ToUnixTime(Now, +8) '这里用当前时间戳当成单号 13 | param = "gogo-asp-demo" '选填, 商户自定义的参数,回调通知的时候会原样返回 14 | 15 | '支付完成后通知开发者服务器的url。(不传会获取GOGO支付商户后台设置的默认回调地址) 这里要修改成商户自己接收支付成功回调通知的地址,该地址不能有访问权限 16 | notifyUrl = "http://localhost/notify.asp" 17 | '支付完成后跳转页面url。(不传会获取GOGO支付商户后台设置的默认跳转地址) 18 | returnUrl = "http://localhost/return.asp" 19 | 20 | 'md5加密生成sign 21 | set md5 = new md5utf8 22 | sign = md5(appid&payId¶m&payType&price&appsecret) 23 | 24 | dataStr = "payId="&payId&"¶m="¶m&"&type="&payType&"&price="&price&"&sign="&sign&"¬ifyUrl="¬ifyUrl&"&returnUrl="&returnUrl&"&isHtml=1" 25 | gogozhifu = goPost(apiUrl,dataStr,appid,appsecret) 26 | End Function 27 | 28 | 'GOGO支付发起接口请求,header里需要有appid和appsecret 29 | Function goPost(url,data,appid,appsecret) 30 | Set XmlObj = Server.CreateObject("Microsoft.XMLHTTP") 31 | XmlObj.open "POST",url,false 32 | XmlObj.setrequestheader "App-Id",appid 33 | XmlObj.setrequestheader "App-Secret",appsecret 34 | XmlObj.setrequestheader "Connection","Keep-Alive" 35 | XmlObj.setrequestheader "Cache-Control","no-cache" 36 | XmlObj.setrequestheader "Content-Length",len(data) 37 | XmlObj.setrequestheader "Content-Type", "application/x-www-form-urlencoded" 38 | XmlObj.send(data) 39 | goPost = XmlObj.responseText 40 | Set XmlObj = nothing 41 | End Function 42 | 43 | '时间戳函数 44 | Function ToUnixTime(dateTime, TimeZone) 45 | ToUnixTime = DateAdd("h", -TimeZone, dateTime) 46 | ToUnixTime = DateDiff("s", "1970-1-1 0:0:0", ToUnixTime) 47 | End Function 48 | %> -------------------------------------------------------------------------------- /gogozhifu-maccms/template/default-wap/html/user/pay.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 在线支付 - {$maccms.site_name} 8 | {include file="user/include" /} 9 | 10 | 11 | 12 | 13 | 21 |
22 | 23 | 24 |
25 |
26 | 27 |
28 | 29 |

{$info.order_code}

30 |
31 | 32 |
33 | 34 |

{$info.order_price}元

35 |
36 | 37 |
38 | 39 |

40 | GOGO支付 41 | - 免费注册使用、个人免签约、无手续费、实时回调 42 | 43 |

44 |
45 | 46 | 47 |
48 | 49 |

50 | 58 |

59 |
60 | 61 |
62 |
63 | 64 |
65 | 66 | 67 |
68 | 支付金额:{$info.order_price} 69 |
70 |
71 |
72 | 73 | 74 |
75 | 76 | 77 | 82 | 83 | -------------------------------------------------------------------------------- /gogozhifu-maccms/application/index/controller/Go.php: -------------------------------------------------------------------------------- 1 | action(); 20 | if (in_array($ac, ['login', 'logout', 'ajax_login', 'reg', 'findpass', 'findpass_msg', 'findpass_reset', 'reg_msg', 'oauth', 'logincallback','visit'])) { 21 | 22 | } else { 23 | if ($GLOBALS['user']['user_id'] < 1) { 24 | model('User')->logout(); 25 | return $this->error(lang('index/no_login').'', url('user/login')); 26 | } 27 | /* 28 | $res = model('User')->checkLogin(); 29 | if($res['code']>1){ 30 | model('User')->logout(); 31 | return $this->error($res['msg'], url('user/login')); 32 | } 33 | */ 34 | $this->assign('obj', $GLOBALS['user']); 35 | } 36 | } 37 | 38 | public function gogozhifu() 39 | { 40 | $param = input(); 41 | 42 | $order_code = htmlspecialchars(urldecode(trim($param['order_code']))); 43 | $order_id = intval((trim($param['order_id']))); 44 | $payment = strtolower(htmlspecialchars(urldecode(trim($param['payment'])))); 45 | 46 | if (empty($order_code) && empty($order_id) && empty($payment)) { 47 | return $this->error(lang('param_err')); 48 | } 49 | 50 | if ($GLOBALS['config']['pay'][$payment]['appid'] == '') { 51 | return $this->error(lang('index/payment_status')); 52 | } 53 | 54 | //核实订单 55 | $where['order_id'] = $order_id; 56 | $where['order_code'] = $order_code; 57 | $where['user_id'] = $GLOBALS['user']['user_id']; 58 | $res = model('Order')->infoData($where); 59 | if ($res['code'] > 1) { 60 | return $this->error(lang('index/order_not')); 61 | } 62 | if ($res['info']['order_status'] == 1) { 63 | return $this->error(lang('index/order_payed')); 64 | } 65 | 66 | $cp = 'app\\common\\extend\\pay\\' . ucfirst($payment); 67 | if (class_exists($cp)) { 68 | $c = new $cp; 69 | $payment_res = $c->submit($GLOBALS['user'], $res['info'], $param); 70 | } 71 | if ($payment == 'gogozhifu') { 72 | echo $payment_res; 73 | } 74 | } 75 | 76 | } 77 | -------------------------------------------------------------------------------- /gogozhifu-maccms/template/default-pc/html/user/pay.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | 充值卡充值 - 会员中心 - {$maccms.site_name} 12 | 13 | 14 | {include file="user/include" /} 15 | 16 | 17 | {include file="user/head" /} 18 |
19 |
20 |
会员头像

{$info.user_name}
{$info.group.group_name}

21 | 31 |
32 | 63 |
64 | 69 | {include file="user/foot" /} 70 | 71 | -------------------------------------------------------------------------------- /gogozhifu-maccms/application/common/extend/pay/Gogozhifu.php: -------------------------------------------------------------------------------- 1 | $payId, 29 | 'param' => $param, 30 | 'type' => $type, 31 | 'price' => $price, 32 | 'sign' => $sign, 33 | 'isHtml' => 1, 34 | 'notifyUrl' => $GLOBALS['http_type'] . $_SERVER['HTTP_HOST'] . '/index.php/payment/notify/pay_type/gogozhifu',//通知地址 35 | 'returnUrl' =>$GLOBALS['http_type'] . $_SERVER['HTTP_HOST'] . '/index.php/payment/notify/pay_type/gogozhifu',//跳转地址 36 | ]; 37 | return $this->ggPost($url, $data); 38 | } 39 | 40 | public function notify() 41 | { 42 | $data = input(); 43 | //校验签名,确保安全 44 | $appId = trim($GLOBALS['config']['pay']['gogozhifu']['appid']); //APPID 45 | $appSecret = trim($GLOBALS['config']['pay']['gogozhifu']['appsecret']); //APPSECRET 46 | $payId = $data['payId'];//商户订单号 47 | $param = $data['param'];//创建订单的时候传入的参数 48 | $type = $data['type'];//支付方式 :微信支付为1 支付宝支付为2 49 | $price = $data['price'];//订单金额 50 | $reallyPrice = $data['reallyPrice'];//实际支付金额 51 | $sign = $data['sign'];//校验签名,计算方式 = md5(appId + payId + param + type + price + reallyPrice + appSecret) 52 | 53 | //开始校验签名 54 | $_sign = md5($appId . $payId . $param . $type . $price . $reallyPrice . $appSecret); 55 | if ($_sign != $sign) { 56 | echo "error_sign";//sign校验不通过 57 | exit(); 58 | } 59 | echo "success"; 60 | 61 | //处理后续业务逻辑 62 | model('Order')->notify($data['payId'], 'gogozhifu'); 63 | } 64 | 65 | /** 66 | * ggf使用的post 67 | * @param $url 68 | * @param $data 69 | * @return mixed 70 | */ 71 | public function ggPost($url, $data) 72 | { 73 | $headerArray = [ 74 | "App-Id: " . trim($GLOBALS['config']['pay']['gogozhifu']['appid']), 75 | "App-Secret: " . trim($GLOBALS['config']['pay']['gogozhifu']['appsecret']) 76 | ]; 77 | $curl = curl_init(); 78 | curl_setopt($curl, CURLOPT_URL, $url); 79 | curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 80 | curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); 81 | curl_setopt($curl, CURLOPT_POST, 1); 82 | curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 83 | curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray); 84 | curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 85 | $output = curl_exec($curl); 86 | curl_close($curl); 87 | //将返回的json对象解码成数组对象并返回 88 | //$output = json_decode($output,true); 89 | return $output; 90 | } 91 | } -------------------------------------------------------------------------------- /gogozhifu-demo-python/gogozhifu-demo-python.py: -------------------------------------------------------------------------------- 1 | # 2 | # GOGO支付接入代码DEMO - python版本 3 | # 感谢ys提供该demo,QQ:279124388 4 | # 5 | # GOGO支付 - 更好的个人支付解决方案 6 | # 官网: https://www.gogozhifu.com 7 | # QQ: 653107385 8 | # 微信: gump994 9 | # 10 | 11 | import requests 12 | import hashlib 13 | import time 14 | 15 | 16 | 17 | class GoApiClient(object): 18 | def __init__(self, AppId, AppSecret , type ): 19 | self.AppId = AppId 20 | self.AppSecret = AppSecret 21 | self.tpye = type 22 | self.headers = {"App-Id": self.AppId, "App-Secret": self.AppSecret} 23 | 24 | def pay(self, method,param_json, **kwargs): 25 | params = param_json 26 | if self.tpye =='Create': 27 | params['sign'] = hashlib.md5((self.AppId + params['payId'] + params['param'] + params['type'] + params['price'] + self.AppSecret).encode('utf-8')).hexdigest() #创建订单时生成校验签名 28 | resp = requests.post(method, params=params, **kwargs, headers=self.headers) 29 | print(resp.url) 30 | return (resp.text) 31 | 32 | 33 | 34 | 35 | 36 | 37 | AppId = "你的appid" 38 | AppSecret = "你的AppSecret" 39 | 40 | client = GoApiClient(AppId, AppSecret,'Create') 41 | resp = client.pay("https://www.gogozhifu.com/shop/api/createOrder", #创建订单 42 | { 'payId': time.strftime("%Y%m%d%H%M%S", time.localtime()) , #【必传】商户订单号,可以是时间戳,不可重复 43 | 'type': '1' , #【必传】微信支付传入1 支付宝支付传入2 44 | 'price': '50.00', #【必传】订单金额,保留两位小数的字符串,例如“1.00” 45 | 'param':'', #【可选】传输参数,将会原样返回到异步和同步通知接口 46 | 'notifyUrl':'http://localhost/notify.php', #【可选】传入则设置该订单的异步通知接口为该参数,不传或传空则使用后台设置的接口 47 | 'returnUrl':'http://localhost/return.php', #【可选】传入则设置该订单的同步跳转接口为该参数,不传或传空则使用后台设置的接口 48 | 'title':'', #【可选】订单主题、类型,之后可根据该值统计分析数据,最多10个字符 49 | 'isHtml':'1', #【可选】传入1则自动跳转到支付页面,否则返回创建结果的json数据 50 | 'content':'', #【可选】描述订单具体内容、备注等说明文字 51 | 'returnParam':'' #【可选】默认是0,传1即可让官方支付页跳转returnUrl带上回调通知的参数 52 | } 53 | ) 54 | 55 | print(resp) 56 | 57 | 58 | 59 | # 60 | # 61 | # client = GoApiClient(AppId, AppSecret ,'Inquire' ) 62 | # resp = client.pay("https://www.gogozhifu.com/getOrder", #查询订单信息 63 | # {'orderId': '202110061010199251' #【必传】云端订单号,创建订单返回的 64 | # }) 65 | # print(resp) 66 | # 67 | # 68 | # 69 | # client = GoApiClient(AppId, AppSecret ,'Inquire' ) 70 | # resp = client.pay("https://www.gogozhifu.com/checkOrder", #查询订单状态 71 | # {'orderId': '202110032010346128' #【必传】云端订单号,创建订单返回的 72 | # }) 73 | # print(resp) 74 | # 75 | # 76 | # client = GoApiClient(AppId, AppSecret ,'Inquire' ) 77 | # resp = client.pay("https://www.gogozhifu.com/closeOrder", #关闭订单 78 | # {'orderId': '202110051310219985' 79 | # 'payId':'' 80 | # }) 81 | # print(resp) 82 | # 83 | # client = GoApiClient(AppId, AppSecret ,'Inquire' ) 84 | # resp = client.pay("https://www.gogozhifu.com/deleteOrder", #删除订单 85 | # {'orderId': '202110061010199251', 86 | # 'payId':'20211006101819' 87 | # }) 88 | # print(resp) 89 | 90 | -------------------------------------------------------------------------------- /gogozhifu-demo-java/HttpUtils.java: -------------------------------------------------------------------------------- 1 | /* GOOG支付接入示例代码 - JAVA版本 */ 2 | /* 更多信息请前往官网:https://www.gogozhifu.com */ 3 | 4 | import org.apache.http.HttpEntity; 5 | import org.apache.http.HttpResponse; 6 | import org.apache.http.client.ClientProtocolException; 7 | import org.apache.http.client.methods.HttpPost; 8 | import org.apache.http.config.Registry; 9 | import org.apache.http.config.RegistryBuilder; 10 | import org.apache.http.conn.socket.ConnectionSocketFactory; 11 | import org.apache.http.conn.socket.PlainConnectionSocketFactory; 12 | import org.apache.http.conn.ssl.NoopHostnameVerifier; 13 | import org.apache.http.conn.ssl.SSLConnectionSocketFactory; 14 | import org.apache.http.entity.StringEntity; 15 | import org.apache.http.impl.client.CloseableHttpClient; 16 | import org.apache.http.impl.client.HttpClients; 17 | import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; 18 | import org.apache.http.ssl.SSLContexts; 19 | import org.apache.http.util.EntityUtils; 20 | 21 | import javax.net.ssl.SSLContext; 22 | import java.io.IOException; 23 | import java.net.URI; 24 | import java.net.URISyntaxException; 25 | import java.security.KeyManagementException; 26 | import java.security.KeyStoreException; 27 | import java.security.NoSuchAlgorithmException; 28 | 29 | public class HttpUtils { 30 | private static class ResultData { 31 | int status; 32 | String result; 33 | 34 | public ResultData() { 35 | this.status = 400; 36 | } 37 | } 38 | 39 | public static int post(String url) { 40 | return post(url ,null); 41 | } 42 | 43 | public static int post(String url, String json) { 44 | ResultData rd = postIml(url, json); 45 | return rd.status; 46 | } 47 | 48 | public static String goPost(String url, String json) { 49 | ResultData rd = postIml(url, json); 50 | return rd.result; 51 | } 52 | 53 | public static ResultData postIml(String url, String json) { 54 | ResultData rd = new ResultData(); 55 | 56 | SSLContext sslContext = null; 57 | try { 58 | sslContext = SSLContexts.custom() 59 | .loadTrustMaterial((chain, authType) -> true) 60 | .build(); 61 | } catch (NoSuchAlgorithmException e) { 62 | e.printStackTrace(); 63 | } catch (KeyManagementException e) { 64 | e.printStackTrace(); 65 | } catch (KeyStoreException e) { 66 | e.printStackTrace(); 67 | } 68 | SSLConnectionSocketFactory sslSF = new SSLConnectionSocketFactory( 69 | sslContext, 70 | NoopHostnameVerifier.INSTANCE); 71 | PlainConnectionSocketFactory plainConnectionSocketFactory = new PlainConnectionSocketFactory(); 72 | Registry registry = RegistryBuilder.create() 73 | .register("https", sslSF) 74 | .register("http", plainConnectionSocketFactory) 75 | .build(); 76 | PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry); 77 | CloseableHttpClient httpClient = HttpClients.custom() 78 | .setConnectionManager(connectionManager) 79 | .build(); 80 | 81 | HttpPost post = new HttpPost(); 82 | try { 83 | post.setHeader("Content-Type", "application/json;charset=UTF-8"); 84 | post.setHeader("App-Id", "GOGO支付商户自己的AppId"); 85 | post.setHeader("App-Secret", "GOGO支付商户自己的AppSecret"); 86 | post.setURI(new URI(url)); 87 | 88 | if (null != json) { 89 | StringEntity requestEntity = new StringEntity(json,"utf-8"); 90 | requestEntity.setContentEncoding("UTF-8"); 91 | post.setEntity(requestEntity); 92 | } 93 | 94 | HttpResponse resp = httpClient.execute(post); 95 | 96 | int status = resp.getStatusLine().getStatusCode(); 97 | rd.status = status; 98 | HttpEntity httpEntity = resp.getEntity(); 99 | rd.result = EntityUtils.toString(httpEntity); 100 | 101 | httpClient.close(); 102 | } catch (URISyntaxException e) { 103 | e.printStackTrace(); 104 | } catch (ClientProtocolException e) { 105 | e.printStackTrace(); 106 | } catch (IOException e) { 107 | e.printStackTrace(); 108 | } 109 | 110 | return rd; 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /gogozhifu_Cscms/plugins/sys/pay/Ggzf.php: -------------------------------------------------------------------------------- 1 | load->model('Csuser'); 15 | $this->lang->load('pay'); 16 | } 17 | 18 | //请求支付 19 | public function index($id=0,$sid=1) 20 | { 21 | $this->Csuser->User_Login(); 22 | $id=(int)$id; //订单ID 23 | $sid=(int)$sid; //支付方式 24 | if($id==0) msg_url(L('pay_01'),spacelink('pay')); 25 | $row=$this->Csdb->get_row('pay','*',$id); 26 | if(!$row || $row->uid!=$_SESSION['cscms__id']){ 27 | msg_url(L('pay_02'),spacelink('pay')); 28 | } 29 | 30 | $appId = trim(CS_Ggzf_ID); 31 | $appSecret = trim(CS_Ggzf_Key); 32 | $url = "https://www.gogozhifu.com/shop/api/createOrder"; 33 | 34 | $payId = $row->dingdan; /* 商户订单号*/ 35 | $param = 'orderId' . $id; 36 | $type = $sid; 37 | $price = $row->rmb; 38 | $sign = md5($appId . $payId . $param . $type . $price. $appSecret); 39 | $data = array( 40 | 'payId' => $payId, 41 | 'param' => $param, 42 | 'type' => $type, 43 | 'price' => $price, 44 | 'sign' => $sign, 45 | 'isHtml' => 1, 46 | 'notifyUrl' => get_link('pay/ggzf/notify_url'),/* 同步返回地址 */ 47 | 'returnUrl' => get_link('pay/ggzf/return_url'),/* 异步返回地址 */ 48 | ); 49 | echo $this->ggPost($url, $data); 50 | } 51 | 52 | //同步返回 53 | public function return_url() 54 | { 55 | msg_url('充值成功!',spacelink('pay')); 56 | } 57 | 58 | //异步返回 59 | public function notify_url() 60 | { 61 | //校验签名,确保安全 62 | $appId = trim(CS_Ggzf_ID); //APPID 63 | $appSecret = trim(CS_Ggzf_Key); //APPSECRET 64 | $payId = $this->input->get('payId',TRUE,TRUE);//商户订单号 65 | $param = $this->input->get('param',TRUE,TRUE);//创建订单的时候传入的参数 66 | $type = $this->input->get('type',TRUE,TRUE);//支付方式 :微信支付为1 支付宝支付为2 67 | $price = $this->input->get('price',TRUE,TRUE);//订单金额 68 | $reallyPrice = $this->input->get('reallyPrice',TRUE,TRUE);//实际支付金额 69 | $sign = $this->input->get('sign',TRUE,TRUE);//校验签名,计算方式 = md5(appId + payId + param + type + price + reallyPrice + appSecret) 70 | 71 | //开始校验签名 72 | $_sign = md5($appId . $payId . $param . $type . $price . $reallyPrice . $appSecret); 73 | if ($_sign != $sign) { 74 | echo "error_sign";//sign校验不通过 75 | exit(); 76 | } 77 | $row=$this->Csdb->get_row('pay','*',$payId,'dingdan'); 78 | if($row && $row->pid!=1){ 79 | //增加金钱 80 | $this->db->query("update ".CS_SqlPrefix."user set rmb=rmb+".$row->rmb." where id=".$row->uid.""); 81 | //改变状态 82 | $this->db->query("update ".CS_SqlPrefix."pay set pid=1 where id=".$row->id.""); 83 | //发送通知 84 | $add['uida']=$row->uid; 85 | $add['uidb']=0; 86 | $add['name']=L('pay_11'); 87 | $add['neir']=L('pay_17',array($row->rmb,$payId)); 88 | $add['addtime']=time(); 89 | $this->Csdb->get_insert('msg',$add); 90 | } 91 | echo "success"; 92 | } 93 | 94 | /** 95 | * ggzf使用的post 96 | * @param $url 97 | * @param $data 98 | * @return mixed 99 | */ 100 | public function ggPost($url, $data) 101 | { 102 | $headerArray = array( 103 | "App-Id: " . trim(CS_Ggzf_ID), 104 | "App-Secret: " . trim(CS_Ggzf_Key) 105 | ); 106 | $curl = curl_init(); 107 | curl_setopt($curl, CURLOPT_URL, $url); 108 | curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 109 | curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); 110 | curl_setopt($curl, CURLOPT_POST, 1); 111 | curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 112 | curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArray); 113 | curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 114 | $output = curl_exec($curl); 115 | curl_close($curl); 116 | //将返回的json对象解码成数组对象并返回 117 | //$output = json_decode($output,true); 118 | return $output; 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /gogozhifu-demo-java/GoGoZhiFu.java: -------------------------------------------------------------------------------- 1 | /* GOOG支付接入示例代码 - JAVA版本 */ 2 | /* 更多信息请前往官网:https://www.gogozhifu.com */ 3 | 4 | import com.alibaba.fastjson.JSONObject; 5 | import org.springframework.util.StringUtils; 6 | 7 | import javax.servlet.http.HttpServletResponse; 8 | import java.io.IOException; 9 | import java.io.PrintWriter; 10 | import java.security.MessageDigest; 11 | import java.security.NoSuchAlgorithmException; 12 | 13 | public class GoGoZhiFu { 14 | 15 | private final static String APP_ID = "填入GOGO支付商户自己的AppId"; 16 | private final static String APP_SECRET = "填入GOGO支付商户自己的AppSecret"; 17 | 18 | // 支付时调用该方法,设置好传入参数PayParams 19 | public void pay(PayParams payParams, HttpServletResponse response) { 20 | if (null != payParams) { 21 | //计算并设置签名sign 22 | payParams.setSign(generateOrderSign(payParams, APP_ID, APP_SECRET)); 23 | 24 | String paramsString = JSONObject.toJSONString(payParams); 25 | String apiUrl = "https://www.gogozhifu.com/shop/api/createOrder"; 26 | //发起的goPost请求里需要设置请求头App-Id和App-Secret 27 | String result = HttpUtils.goPost(apiUrl, paramsString); 28 | 29 | // 如果使用了GOGO支付收银台页面,直接在跳转的页面完成支付即可 30 | if (payParams.getIsHtml == 1) { 31 | response.setContentType("text/html; charset=utf-8"); 32 | } else { 33 | // 如果是使用自定义JSON模式,这里需要用户自己来对数据做处理,根据返回的支付数据自定义收款页面 34 | } 35 | 36 | PrintWriter out = null; 37 | try { 38 | out = response.getWriter(); 39 | out.write(result); 40 | out.flush(); 41 | } catch (IOException e) { 42 | e.printStackTrace(); 43 | } finally { 44 | if (out != null) { 45 | out.close(); 46 | } 47 | } 48 | } 49 | } 50 | 51 | // 支付成功后,GOGO支付会通知开发者设置的notifyUrl 52 | /* 53 | 建议的controller写法如下: 54 | @PostMapping("/notifyUrl") 55 | public String notifyUrl(@RequestBody NotifyParams notifyParams, HttpServletResponse response) { 56 | return notify(notifyParams, response); 57 | } 58 | */ 59 | 60 | // 接收GOGO支付完成的回调通知方法,在该函数中主要用于商户自己根据支付完成处理相应的数据逻辑 61 | public String notify(NotifyParams notifyParams, HttpServletResponse response) { 62 | if (null != notifyParams) { 63 | String sign = generateNotifySign(notifyParams, APP_ID, APP_SECRET); 64 | if (sign.equals(notifyParams.getSign())) { 65 | // 在这里根据商户自己需求完成后续逻辑操作 66 | // 订单数据更新操作... 67 | 68 | // 成功完成后正确返回 69 | response.setStatus(HttpServletResponse.SC_OK); 70 | return "success"; 71 | } 72 | } 73 | response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); 74 | return "error" 75 | } 76 | 77 | //生成回调通知的签名sign 78 | private static String generateNotifySign(NotifyParams params, String appId, String appSecret) { 79 | if (!StringUtils.isEmpty(secret)) { 80 | StringBuilder sb = new StringBuilder(); 81 | sb.append(appId); 82 | sb.append(params.getPayId()); 83 | sb.append(params.getParam()); 84 | sb.append(params.getType()); 85 | sb.append(params.getPrice()); 86 | sb.append(params.getReallyPrice()); 87 | sb.append(appSecret); 88 | return md5(sb.toString()); 89 | } 90 | return ""; 91 | } 92 | 93 | //生成下单签名sign 94 | private static String generateOrderSign(PayParams params, String appId, String appSecret) { 95 | if (!StringUtils.isEmpty(appId) && !StringUtils.isEmpty(appSecret)) { 96 | StringBuilder sb = new StringBuilder(); 97 | sb.append(appId); 98 | sb.append(params.getPayId()); 99 | sb.append(params.getParam()); 100 | sb.append(params.getType()); 101 | sb.append(params.getPrice()); 102 | sb.append(appSecret); 103 | return md5(sb.toString()); 104 | } 105 | return ""; 106 | } 107 | 108 | // md5加密 109 | private static String md5(String data) { 110 | String ret = ""; 111 | try { 112 | MessageDigest md5 = MessageDigest.getInstance("MD5"); 113 | byte[] bytes = md5.digest(data.getBytes()); 114 | StringBuilder sb = new StringBuilder(); 115 | for (byte b : bytes) { 116 | String temp = Integer.toHexString(b & 0xff); 117 | temp = temp.toLowerCase(); 118 | if (temp.length() == 1) { 119 | sb.append("0"); 120 | } 121 | sb.append(temp); 122 | } 123 | 124 | ret = sb.toString(); 125 | } catch (NoSuchAlgorithmException e) { 126 | e.printStackTrace(); 127 | } 128 | return ret; 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /gogozhifu-ecshop/mobile/include/modules/payment/gogowx.php: -------------------------------------------------------------------------------- 1 | 'gogowx_appid', 'type' => 'text', 'value' => ''), 47 | array('name' => 'gogowx_appsecret', 'type' => 'text', 'value' => ''), 48 | ); 49 | 50 | return; 51 | } 52 | 53 | /** 54 | * 类 55 | */ 56 | class gogowx 57 | { 58 | 59 | /** 60 | * 构造函数 61 | * 62 | * @access public 63 | * @param 64 | * 65 | * @return void 66 | */ 67 | function __construct() 68 | { 69 | $this->gogowx(); 70 | } 71 | 72 | function gogowx() 73 | { 74 | } 75 | 76 | /** 77 | * 生成支付代码 78 | * @param array $order 订单信息 79 | * @param array $payment 支付方式信息 80 | */ 81 | function get_code($order, $payment) 82 | { 83 | 84 | $appId = $payment['gogowx_appid']; // APPID 85 | $appSecret = $payment['gogowx_appsecret']; // APPSECRET 86 | // GOGO支付创建订单API地址 87 | $apiUrl = 'https://www.gogozhifu.com/shop/api/createOrder'; 88 | // 选填,支付完成后通知开发者服务器的url。(不传会获取GOGO支付商户后台设置的默认回调地址) 89 | //这里要修改成商户自己接收支付成功回调通知的地址,该地址不能有访问权限,POST请求方式 90 | $notifyUrl = return_url(basename(__FILE__, '.php')); 91 | // 选填,跳转页面url。(不传会获取GOGO支付商户后台设置的默认跳转地址) 92 | $returnUrl = return_url(basename(__FILE__, '.php')); 93 | // 选填, 商户自定义的参数,回调通知的时候会原样返回 94 | $param = $order['log_id']; 95 | 96 | $type = 1; //微信 97 | $payId = $order['order_sn'] . '-' . $type; //使用本商户订单号 98 | $price = $order['order_amount']; 99 | 100 | // 计算sign 101 | $sign = md5($appId . $payId . $param . $type . $price . $appSecret); 102 | 103 | $data = array( 104 | 'payId' => $payId, 105 | 'param' => $param, 106 | 'type' => $type, 107 | 'price' => $price, 108 | 'sign' => $sign, 109 | 'notifyUrl' => $notifyUrl, 110 | 'returnUrl' => $returnUrl, 111 | 'isHtml' => 1, 112 | 'returnParam' => 1 113 | ); 114 | 115 | $ret = $this->goPost($apiUrl, $data, $appId, $appSecret); 116 | 117 | if (stripos($ret, '"); 82 | }else{ 83 | msg_url(L('pay_04'),'javascript:history.back();'); 84 | } 85 | } 86 | 87 | //充值卡充值 88 | public function card(){ 89 | //模板 90 | $tpl='pay-card.html'; 91 | //URL地址 92 | $url='pay/card'; 93 | //当前会员 94 | $row=$this->Csdb->get_row_arr('user','*',$_SESSION['cscms__id']); 95 | if(empty($row['nichen'])) $row['nichen']=$row['name']; 96 | //装载模板 97 | $title=L('pay_05'); 98 | $ids['uid']=$_SESSION['cscms__id']; 99 | $ids['uida']=$_SESSION['cscms__id']; 100 | 101 | $zdy['[user:token]'] = get_token(); 102 | $zdy['[user:cardsave]'] = spacelink('pay/cardsave'); 103 | $this->Cstpl->user_list($row,$url,1,$tpl,$title,'','',$ids,false,'user',$zdy); 104 | } 105 | 106 | //充值卡充值 107 | public function cardsave(){ 108 | $token=$this->input->post('token', TRUE); 109 | if(!get_token('token',1,$token)) msg_url(L('pay_06'),'javascript:history.back();'); 110 | 111 | $card=$this->input->post('card',true,true); //卡号 112 | $pass=$this->input->post('pass',true,true); //卡密 113 | if(empty($card) || empty($pass)){ 114 | msg_url(L('pay_07'),'javascript:history.back();'); 115 | } 116 | //判断充值卡是否存在 117 | $row=$this->db->query("SELECT * FROM ".CS_SqlPrefix."paycard where card='".$card."' and pass='".$pass."'")->row(); 118 | if(!$row){ 119 | msg_url(L('pay_08'),'javascript:history.back();'); 120 | } 121 | if($row->uid>0){ 122 | msg_url(L('pay_09'),'javascript:history.back();'); 123 | } 124 | $edit['uid']=$_SESSION['cscms__id']; 125 | $edit['usertime']=time(); 126 | $this->Csdb->get_update('paycard',$row->id,$edit); 127 | //增加金钱 128 | $this->db->query("update ".CS_SqlPrefix."user set rmb=rmb+".$row->rmb." where id=".$_SESSION['cscms__id'].""); 129 | //发送通知 130 | $add['uida']=$_SESSION['cscms__id']; 131 | $add['uidb']=0; 132 | $add['name']=L('pay_10'); 133 | $add['neir']=L('pay_11',array($row->rmb)); 134 | $add['addtime']=time(); 135 | $this->Csdb->get_insert('msg',$add); 136 | msg_url(L('pay_12',array($row->rmb)),spacelink('pay/card')); 137 | } 138 | 139 | //升级 140 | public function group(){ 141 | //模板 142 | $tpl='group.html'; 143 | //URL地址 144 | $url='pay/upgrade'; 145 | //当前会员 146 | $row=$this->Csdb->get_row_arr('user','*',$_SESSION['cscms__id']); 147 | if(empty($row['nichen'])) $row['nichen']=$row['name']; 148 | //装载模板 149 | $title=L('pay_13'); 150 | $ids['uid']=$_SESSION['cscms__id']; 151 | $ids['uida']=$_SESSION['cscms__id']; 152 | 153 | $zdy['[user:token]'] = get_token(); 154 | $zdy['[user:groupsave]'] = spacelink('pay/groupsave'); 155 | $this->Cstpl->user_list($row,$url,1,$tpl,$title,'','',$ids,false,'user',$zdy); 156 | } 157 | 158 | //升级会员组 159 | public function groupsave(){ 160 | $token=$this->input->post('token', TRUE); 161 | if(!get_token('token',1,$token)) msg_url(L('pay_06'),'javascript:history.back();'); 162 | 163 | $zid=intval($this->input->post('zid')); //组ID 164 | $type=intval($this->input->post('type')); //方式 165 | $times=intval($this->input->post('times')); //时长 166 | if($zid==0 || $type==0 || $times<1 || $times>99999){ 167 | msg_url(L('pay_14'),'javascript:history.back();'); 168 | } 169 | $row=$this->db->query("SELECT * FROM ".CS_SqlPrefix."userzu where id=".$zid."")->row(); 170 | if(!$row){ 171 | msg_url(L('pay_15'),'javascript:history.back();'); 172 | } 173 | if($type==3){ //包年 174 | $cion=$row->cion_y; 175 | $zutime=time()+86400*365*$times; 176 | }elseif($type==2){ //包月 177 | $cion=$row->cion_m; 178 | $zutime=time()+86400*30*$times; 179 | }else{ //包天 180 | $cion=$row->cion_d; 181 | $zutime=time()+86400*$times; 182 | } 183 | //总金币 184 | $zcion=$cion*$times; 185 | //判断金币是否够 186 | $ucion=getzd('user','cion',$_SESSION['cscms__id']); 187 | if($ucion < $zcion){ 188 | msg_url(L('pay_16'),'javascript:history.back();'); 189 | } 190 | //判断原来是否为高级会员 191 | $yzutime=getzd('user','zutime',$_SESSION['cscms__id']); 192 | if($yzutime>time()){ 193 | $zutime=$zutime+($yzutime-time()); 194 | } 195 | //修改入库 196 | $this->db->query("update ".CS_SqlPrefix."user set cion=cion-".$zcion.",zid=".$zid.",zutime=".$zutime." where id=".$_SESSION['cscms__id'].""); 197 | //写入消费记录 198 | $add2['title']='升级为'.$row->name.'组会员'; 199 | $add2['uid']=$_SESSION['cscms__id']; 200 | $add2['dir']='user'; 201 | $add2['nums']=$zcion; 202 | $add2['ip']=getip(); 203 | $add2['addtime']=time(); 204 | $this->Csdb->get_insert('spend',$add2); 205 | //发送通知 206 | $add['uida']=$_SESSION['cscms__id']; 207 | $add['uidb']=0; 208 | $add['name']=L('pay_17'); 209 | $add['neir']=L('pay_18',array($row->name)); 210 | $add['addtime']=time(); 211 | $this->Csdb->get_insert('msg',$add); 212 | get_token('token',2); 213 | msg_url(L('pay_19',array($row->name)),spacelink('pay/group')); 214 | } 215 | 216 | //兑换 217 | public function change(){ 218 | //模板 219 | $tpl='change.html'; 220 | //URL地址 221 | $url='pay/change'; 222 | //当前会员 223 | $row=$this->Csdb->get_row_arr('user','*',$_SESSION['cscms__id']); 224 | if(empty($row['nichen'])) $row['nichen']=$row['name']; 225 | //装载模板 226 | $title=L('pay_20'); 227 | $ids['uid']=$_SESSION['cscms__id']; 228 | $ids['uida']=$_SESSION['cscms__id']; 229 | 230 | $zdy['[user:token]'] = get_token(); 231 | $zdy['[user:changesave]'] = spacelink('pay/changesave'); 232 | 233 | $this->Cstpl->user_list($row,$url,1,$tpl,$title,'','',$ids,false,'user',$zdy); 234 | } 235 | 236 | //兑换金币 237 | public function changesave(){ 238 | $token=$this->input->post('token', TRUE); 239 | if(!get_token('token',1,$token)) msg_url(L('pay_06'),'javascript:history.back();'); 240 | 241 | $rmb=intval($this->input->post('rmb')); 242 | if($rmb<1 || $rmb>99999){ 243 | msg_url(L('pay_21'),'javascript:history.back();'); 244 | } 245 | //判断余额是否够 246 | $urmb=getzd('user','rmb',$_SESSION['cscms__id']); 247 | if($urmb < $rmb){ 248 | msg_url(L('pay_22',array($rmb)),'javascript:history.back();'); 249 | } 250 | $cion=$rmb*User_RmbToCion; 251 | //修改入库 252 | $this->db->query("update ".CS_SqlPrefix."user set rmb=rmb-".$rmb.",cion=cion+".$cion." where id=".$_SESSION['cscms__id'].""); 253 | //写入消费记录 254 | $add2['title']=L('pay_23',array($cion)); 255 | $add2['uid']=$_SESSION['cscms__id']; 256 | $add2['dir']='user'; 257 | $add2['nums']=$rmb; 258 | $add2['sid']=1; 259 | $add2['ip']=getip(); 260 | $add2['addtime']=time(); 261 | $this->Csdb->get_insert('spend',$add2); 262 | //发送通知 263 | $add['uida']=$_SESSION['cscms__id']; 264 | $add['uidb']=0; 265 | $add['name']=L('pay_24'); 266 | $add['neir']=L('pay_25',array($rmb,$cion)); 267 | $add['addtime']=time(); 268 | $this->Csdb->get_insert('msg',$add); 269 | get_token('token',2); 270 | msg_url(L('pay_26',array($cion)),spacelink('pay/change')); 271 | } 272 | 273 | //充值记录 274 | public function lists($pid=0,$page=1){ 275 | $pid=intval($pid); 276 | $page=intval($page); //分页 277 | //模板 278 | $tpl='pay-list.html'; 279 | //URL地址 280 | $url='pay/lists/'.$pid; 281 | //当前会员 282 | $row=$this->Csdb->get_row_arr('user','*',$_SESSION['cscms__id']); 283 | if(empty($row['nichen'])) $row['nichen']=$row['name']; 284 | //装载模板 285 | $title=L('pay_27'); 286 | $ids['uid']=$_SESSION['cscms__id']; 287 | $ids['uida']=$_SESSION['cscms__id']; 288 | $sqlstr = "select * from ".CS_SqlPrefix."pay where uid=".$_SESSION['cscms__id']; 289 | if($pid>0){ 290 | $pids=($pid>3)?0:$pid; 291 | $sqlstr.=" and pid=".$pids; 292 | } 293 | 294 | $zdy['[pay:pid]'] = $pid; 295 | $this->Cstpl->user_list($row,$url,$page,$tpl,$title,$pid,$sqlstr,$ids,false,'user',$zdy); 296 | } 297 | 298 | //消费记录 299 | public function spend($sid=0,$page=1){ 300 | $sid=intval($sid); //分页 301 | $page=intval($page); //分页 302 | //模板 303 | $tpl='pay-spend.html'; 304 | //URL地址 305 | $url='pay/spend/'.$sid; 306 | //当前会员 307 | $row=$this->Csdb->get_row_arr('user','*',$_SESSION['cscms__id']); 308 | if(empty($row['nichen'])) $row['nichen']=$row['name']; 309 | //装载模板 310 | $title=L('pay_28'); 311 | $ids['uid']=$_SESSION['cscms__id']; 312 | $ids['uida']=$_SESSION['cscms__id']; 313 | $sqlstr = "select * from ".CS_SqlPrefix."spend where uid=".$_SESSION['cscms__id']; 314 | if($sid>0){ 315 | $sqlstr.=" and sid=".($sid-1); 316 | } 317 | $zdy['[spend:sid]'] = $sid; 318 | $this->Cstpl->user_list($row,$url,$page,$tpl,$title,$sid,$sqlstr,$ids,false,'user',$zdy); 319 | } 320 | 321 | //分成记录 322 | public function income($sid=0,$page=1){ 323 | $sid=intval($sid); //分页 324 | $page=intval($page); //分页 325 | //模板 326 | $tpl='pay-income.html'; 327 | //URL地址 328 | $url='pay/income/'.$sid; 329 | //当前会员 330 | $row=$this->Csdb->get_row_arr('user','*',$_SESSION['cscms__id']); 331 | if(empty($row['nichen'])) $row['nichen']=$row['name']; 332 | //装载模板 333 | $title=L('pay_29'); 334 | $ids['uid']=$_SESSION['cscms__id']; 335 | $ids['uida']=$_SESSION['cscms__id']; 336 | $sqlstr = "select * from ".CS_SqlPrefix."income where uid=".$_SESSION['cscms__id']; 337 | if($sid>0){ 338 | $sqlstr.=" and sid=".($sid-1); 339 | } 340 | $zdy['[income:sid]'] = $sid; 341 | $this->Cstpl->user_list($row,$url,$page,$tpl,$title,$sid,$sqlstr,$ids,false,'user',$zdy); 342 | } 343 | 344 | //充值卡记录 345 | public function cardlist($page=1){ 346 | $page=intval($page); //分页 347 | //模板 348 | $tpl='pay-cardlist.html'; 349 | //URL地址 350 | $url='pay/cardlist'; 351 | //当前会员 352 | $row=$this->Csdb->get_row_arr('user','*',$_SESSION['cscms__id']); 353 | if(empty($row['nichen'])) $row['nichen']=$row['name']; 354 | //装载模板 355 | $title=L('pay_30'); 356 | $ids['uid']=$_SESSION['cscms__id']; 357 | $ids['uida']=$_SESSION['cscms__id']; 358 | $sqlstr = "select * from ".CS_SqlPrefix."paycard where uid=".$_SESSION['cscms__id']; 359 | $this->Cstpl->user_list($row,$url,$page,$tpl,$title,'',$sqlstr,$ids); 360 | } 361 | } 362 | -------------------------------------------------------------------------------- /gogozhifu-asp-demo/md5.asp: -------------------------------------------------------------------------------- 1 | <% 2 | ' MD5签名函数 3 | Private Const BITS_TO_A_BYTE = 8 4 | Private Const BYTES_TO_A_WORD = 4 5 | Private Const BITS_TO_A_WORD = 32 6 | Class md5utf8 7 | 8 | Private m_lOnBits(30) 9 | Private m_l2Power(30) 10 | 11 | Private Function LShift(lValue, iShiftBits) 12 | If iShiftBits = 0 Then 13 | LShift = lValue 14 | Exit Function 15 | ElseIf iShiftBits = 31 Then 16 | If lValue And 1 Then 17 | LShift = &H80000000 18 | Else 19 | LShift = 0 20 | End If 21 | Exit Function 22 | ElseIf iShiftBits < 0 Or iShiftBits > 31 Then 23 | Err.Raise 6 24 | End If 25 | 26 | If (lValue And m_l2Power(31 - iShiftBits)) Then 27 | LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * m_l2Power(iShiftBits)) Or &H80000000 28 | Else 29 | LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * m_l2Power(iShiftBits)) 30 | End If 31 | End Function 32 | 33 | Private Function str2bin(varstr) 34 | Dim varasc 35 | Dim i 36 | Dim varchar 37 | Dim varlow 38 | Dim varhigh 39 | 40 | str2bin="" 41 | For i=1 To Len(varstr) 42 | varchar=mid(varstr,i,1) 43 | varasc = Asc(varchar) 44 | 45 | If varasc<0 Then 46 | varasc = varasc + 65535 47 | End If 48 | 49 | If varasc>255 Then 50 | varlow = Left(Hex(Asc(varchar)),2) 51 | varhigh = right(Hex(Asc(varchar)),2) 52 | str2bin = str2bin & chrB("&H" & varlow) & chrB("&H" & varhigh) 53 | Else 54 | str2bin = str2bin & chrB(AscB(varchar)) 55 | End If 56 | Next 57 | End Function 58 | 59 | Private Function str2bin_utf(varstr) 60 | Dim varchar, code, codearr, j, i 61 | str2bin_utf = "" 62 | For i=1 To Len(varstr) 63 | varchar = Mid(varstr,i,1) 64 | code = Server.UrlEncode(varchar) 65 | If(code="+") Then code="%20" 66 | If Len(code) = 1 Then 67 | str2bin_utf = str2bin_utf & chrB(AscB(code)) 68 | Else 69 | codearr = Split(code,"%") 70 | For j = 1 to UBound(codearr) 71 | str2bin_utf = str2bin_utf & ChrB("&H" & codearr(j)) 72 | Next 73 | End If 74 | Next 75 | End Function 76 | 77 | Private Function RShift(lValue, iShiftBits) 78 | If iShiftBits = 0 Then 79 | RShift = lValue 80 | Exit Function 81 | ElseIf iShiftBits = 31 Then 82 | If lValue And &H80000000 Then 83 | RShift = 1 84 | Else 85 | RShift = 0 86 | End If 87 | Exit Function 88 | ElseIf iShiftBits < 0 Or iShiftBits > 31 Then 89 | Err.Raise 6 90 | End If 91 | 92 | RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits) 93 | 94 | If (lValue And &H80000000) Then 95 | RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1))) 96 | End If 97 | End Function 98 | 99 | Private Function RotateLeft(lValue, iShiftBits) 100 | RotateLeft = LShift(lValue, iShiftBits) Or RShift(lValue, (32 - iShiftBits)) 101 | End Function 102 | 103 | Private Function AddUnsigned(lX, lY) 104 | Dim lX4 105 | Dim lY4 106 | Dim lX8 107 | Dim lY8 108 | Dim lResult 109 | 110 | lX8 = lX And &H80000000 111 | lY8 = lY And &H80000000 112 | lX4 = lX And &H40000000 113 | lY4 = lY And &H40000000 114 | 115 | lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF) 116 | 117 | If lX4 And lY4 Then 118 | lResult = lResult Xor &H80000000 Xor lX8 Xor lY8 119 | ElseIf lX4 Or lY4 Then 120 | If lResult And &H40000000 Then 121 | lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8 122 | Else 123 | lResult = lResult Xor &H40000000 Xor lX8 Xor lY8 124 | End If 125 | Else 126 | lResult = lResult Xor lX8 Xor lY8 127 | End If 128 | 129 | AddUnsigned = lResult 130 | End Function 131 | 132 | Private Function md5_F(x, y, z) 133 | md5_F = (x And y) Or ((Not x) And z) 134 | End Function 135 | 136 | Private Function md5_G(x, y, z) 137 | md5_G = (x And z) Or (y And (Not z)) 138 | End Function 139 | 140 | Private Function md5_H(x, y, z) 141 | md5_H = (x Xor y Xor z) 142 | End Function 143 | 144 | Private Function md5_I(x, y, z) 145 | md5_I = (y Xor (x Or (Not z))) 146 | End Function 147 | 148 | Private Sub md5_FF(a, b, c, d, x, s, ac) 149 | a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_F(b, c, d), x), ac)) 150 | a = RotateLeft(a, s) 151 | a = AddUnsigned(a, b) 152 | End Sub 153 | 154 | Private Sub md5_GG(a, b, c, d, x, s, ac) 155 | a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_G(b, c, d), x), ac)) 156 | a = RotateLeft(a, s) 157 | a = AddUnsigned(a, b) 158 | End Sub 159 | 160 | Private Sub md5_HH(a, b, c, d, x, s, ac) 161 | a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_H(b, c, d), x), ac)) 162 | a = RotateLeft(a, s) 163 | a = AddUnsigned(a, b) 164 | End Sub 165 | 166 | Private Sub md5_II(a, b, c, d, x, s, ac) 167 | a = AddUnsigned(a, AddUnsigned(AddUnsigned(md5_I(b, c, d), x), ac)) 168 | a = RotateLeft(a, s) 169 | a = AddUnsigned(a, b) 170 | End Sub 171 | 172 | Private Function ConvertToWordArray(sMessage) 173 | Dim lMessageLength 174 | Dim lNumberOfWords 175 | Dim lWordArray() 176 | Dim lBytePosition 177 | Dim lByteCount 178 | Dim lWordCount 179 | 180 | Const MODULUS_BITS = 512 181 | Const CONGRUENT_BITS = 448 182 | 183 | lMessageLength = LenB(sMessage) 184 | 185 | lNumberOfWords = (((lMessageLength + ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * (MODULUS_BITS \ BITS_TO_A_WORD) 186 | ReDim lWordArray(lNumberOfWords - 1) 187 | 188 | lBytePosition = 0 189 | lByteCount = 0 190 | Do Until lByteCount >= lMessageLength 191 | lWordCount = lByteCount \ BYTES_TO_A_WORD 192 | lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE 193 | lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(AscB(MidB(sMessage, lByteCount + 1, 1)), lBytePosition) 194 | lByteCount = lByteCount + 1 195 | Loop 196 | 197 | lWordCount = lByteCount \ BYTES_TO_A_WORD 198 | lBytePosition = (lByteCount Mod BYTES_TO_A_WORD) * BITS_TO_A_BYTE 199 | 200 | lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(&H80, lBytePosition) 201 | 202 | lWordArray(lNumberOfWords - 2) = LShift(lMessageLength, 3) 203 | lWordArray(lNumberOfWords - 1) = RShift(lMessageLength, 29) 204 | 205 | ConvertToWordArray = lWordArray 206 | End Function 207 | 208 | Private Function WordToHex(lValue) 209 | Dim lByte 210 | Dim lCount 211 | 212 | For lCount = 0 To 3 213 | lByte = RShift(lValue, lCount * BITS_TO_A_BYTE) And m_lOnBits(BITS_TO_A_BYTE - 1) 214 | WordToHex = WordToHex & Right("0" & Hex(lByte), 2) 215 | Next 216 | End Function 217 | 218 | Private Function MD5(sMessage,input_charset) 219 | m_lOnBits(0) = CLng(1) 220 | m_lOnBits(1) = CLng(3) 221 | m_lOnBits(2) = CLng(7) 222 | m_lOnBits(3) = CLng(15) 223 | m_lOnBits(4) = CLng(31) 224 | m_lOnBits(5) = CLng(63) 225 | m_lOnBits(6) = CLng(127) 226 | m_lOnBits(7) = CLng(255) 227 | m_lOnBits(8) = CLng(511) 228 | m_lOnBits(9) = CLng(1023) 229 | m_lOnBits(10) = CLng(2047) 230 | m_lOnBits(11) = CLng(4095) 231 | m_lOnBits(12) = CLng(8191) 232 | m_lOnBits(13) = CLng(16383) 233 | m_lOnBits(14) = CLng(32767) 234 | m_lOnBits(15) = CLng(65535) 235 | m_lOnBits(16) = CLng(131071) 236 | m_lOnBits(17) = CLng(262143) 237 | m_lOnBits(18) = CLng(524287) 238 | m_lOnBits(19) = CLng(1048575) 239 | m_lOnBits(20) = CLng(2097151) 240 | m_lOnBits(21) = CLng(4194303) 241 | m_lOnBits(22) = CLng(8388607) 242 | m_lOnBits(23) = CLng(16777215) 243 | m_lOnBits(24) = CLng(33554431) 244 | m_lOnBits(25) = CLng(67108863) 245 | m_lOnBits(26) = CLng(134217727) 246 | m_lOnBits(27) = CLng(268435455) 247 | m_lOnBits(28) = CLng(536870911) 248 | m_lOnBits(29) = CLng(1073741823) 249 | m_lOnBits(30) = CDBL(20200412214810) 250 | 251 | m_l2Power(0) = CLng(1) 252 | m_l2Power(1) = CLng(2) 253 | m_l2Power(2) = CLng(4) 254 | m_l2Power(3) = CLng(8) 255 | m_l2Power(4) = CLng(16) 256 | m_l2Power(5) = CLng(32) 257 | m_l2Power(6) = CLng(64) 258 | m_l2Power(7) = CLng(128) 259 | m_l2Power(8) = CLng(256) 260 | m_l2Power(9) = CLng(512) 261 | m_l2Power(10) = CLng(1024) 262 | m_l2Power(11) = CLng(2048) 263 | m_l2Power(12) = CLng(4096) 264 | m_l2Power(13) = CLng(8192) 265 | m_l2Power(14) = CLng(16384) 266 | m_l2Power(15) = CLng(32768) 267 | m_l2Power(16) = CLng(65536) 268 | m_l2Power(17) = CLng(131072) 269 | m_l2Power(18) = CLng(262144) 270 | m_l2Power(19) = CLng(524288) 271 | m_l2Power(20) = CLng(1048576) 272 | m_l2Power(21) = CLng(2097152) 273 | m_l2Power(22) = CLng(4194304) 274 | m_l2Power(23) = CLng(8388608) 275 | m_l2Power(24) = CLng(16777216) 276 | m_l2Power(25) = CLng(33554432) 277 | m_l2Power(26) = CLng(67108864) 278 | m_l2Power(27) = CLng(134217728) 279 | m_l2Power(28) = CLng(268435456) 280 | m_l2Power(29) = CLng(536870912) 281 | m_l2Power(30) = CLng(1073741824) 282 | 283 | 284 | Dim x 285 | Dim k 286 | Dim AA 287 | Dim BB 288 | Dim CC 289 | Dim DD 290 | Dim a 291 | Dim b 292 | Dim c 293 | Dim d 294 | 295 | Const S11 = 7 296 | Const S12 = 12 297 | Const S13 = 17 298 | Const S14 = 22 299 | Const S21 = 5 300 | Const S22 = 9 301 | Const S23 = 14 302 | Const S24 = 20 303 | Const S31 = 4 304 | Const S32 = 11 305 | Const S33 = 16 306 | Const S34 = 23 307 | Const S41 = 6 308 | Const S42 = 10 309 | Const S43 = 15 310 | Const S44 = 21 311 | 312 | If LCase(input_charset) = "utf-8" Then 313 | x = ConvertToWordArray(str2bin_utf(sMessage)) 314 | Else 315 | x = ConvertToWordArray(str2bin(sMessage)) 316 | End If 317 | 318 | a = &H67452301 319 | b = &HEFCDAB89 320 | c = &H98BADCFE 321 | d = &H10325476 322 | 323 | For k = 0 To UBound(x) Step 16 324 | AA = a 325 | BB = b 326 | CC = c 327 | DD = d 328 | 329 | md5_FF a, b, c, d, x(k + 0), S11, &HD76AA478 330 | md5_FF d, a, b, c, x(k + 1), S12, &HE8C7B756 331 | md5_FF c, d, a, b, x(k + 2), S13, &H242070DB 332 | md5_FF b, c, d, a, x(k + 3), S14, &HC1BDCEEE 333 | md5_FF a, b, c, d, x(k + 4), S11, &HF57C0FAF 334 | md5_FF d, a, b, c, x(k + 5), S12, &H4787C62A 335 | md5_FF c, d, a, b, x(k + 6), S13, &HA8304613 336 | md5_FF b, c, d, a, x(k + 7), S14, &HFD469501 337 | md5_FF a, b, c, d, x(k + 8), S11, &H698098D8 338 | md5_FF d, a, b, c, x(k + 9), S12, &H8B44F7AF 339 | md5_FF c, d, a, b, x(k + 10), S13, &HFFFF5BB1 340 | md5_FF b, c, d, a, x(k + 11), S14, &H895CD7BE 341 | md5_FF a, b, c, d, x(k + 12), S11, &H6B901122 342 | md5_FF d, a, b, c, x(k + 13), S12, &HFD987193 343 | md5_FF c, d, a, b, x(k + 14), S13, &HA679438E 344 | md5_FF b, c, d, a, x(k + 15), S14, &H49B40821 345 | 346 | md5_GG a, b, c, d, x(k + 1), S21, &HF61E2562 347 | md5_GG d, a, b, c, x(k + 6), S22, &HC040B340 348 | md5_GG c, d, a, b, x(k + 11), S23, &H265E5A51 349 | md5_GG b, c, d, a, x(k + 0), S24, &HE9B6C7AA 350 | md5_GG a, b, c, d, x(k + 5), S21, &HD62F105D 351 | md5_GG d, a, b, c, x(k + 10), S22, &H2441453 352 | md5_GG c, d, a, b, x(k + 15), S23, &HD8A1E681 353 | md5_GG b, c, d, a, x(k + 4), S24, &HE7D3FBC8 354 | md5_GG a, b, c, d, x(k + 9), S21, &H21E1CDE6 355 | md5_GG d, a, b, c, x(k + 14), S22, &HC33707D6 356 | md5_GG c, d, a, b, x(k + 3), S23, &HF4D50D87 357 | md5_GG b, c, d, a, x(k + 8), S24, &H455A14ED 358 | md5_GG a, b, c, d, x(k + 13), S21, &HA9E3E905 359 | md5_GG d, a, b, c, x(k + 2), S22, &HFCEFA3F8 360 | md5_GG c, d, a, b, x(k + 7), S23, &H676F02D9 361 | md5_GG b, c, d, a, x(k + 12), S24, &H8D2A4C8A 362 | 363 | md5_HH a, b, c, d, x(k + 5), S31, &HFFFA3942 364 | md5_HH d, a, b, c, x(k + 8), S32, &H8771F681 365 | md5_HH c, d, a, b, x(k + 11), S33, &H6D9D6122 366 | md5_HH b, c, d, a, x(k + 14), S34, &HFDE5380C 367 | md5_HH a, b, c, d, x(k + 1), S31, &HA4BEEA44 368 | md5_HH d, a, b, c, x(k + 4), S32, &H4BDECFA9 369 | md5_HH c, d, a, b, x(k + 7), S33, &HF6BB4B60 370 | md5_HH b, c, d, a, x(k + 10), S34, &HBEBFBC70 371 | md5_HH a, b, c, d, x(k + 13), S31, &H289B7EC6 372 | md5_HH d, a, b, c, x(k + 0), S32, &HEAA127FA 373 | md5_HH c, d, a, b, x(k + 3), S33, &HD4EF3085 374 | md5_HH b, c, d, a, x(k + 6), S34, &H4881D05 375 | md5_HH a, b, c, d, x(k + 9), S31, &HD9D4D039 376 | md5_HH d, a, b, c, x(k + 12), S32, &HE6DB99E5 377 | md5_HH c, d, a, b, x(k + 15), S33, &H1FA27CF8 378 | md5_HH b, c, d, a, x(k + 2), S34, &HC4AC5665 379 | 380 | md5_II a, b, c, d, x(k + 0), S41, &HF4292244 381 | md5_II d, a, b, c, x(k + 7), S42, &H432AFF97 382 | md5_II c, d, a, b, x(k + 14), S43, &HAB9423A7 383 | md5_II b, c, d, a, x(k + 5), S44, &HFC93A039 384 | md5_II a, b, c, d, x(k + 12), S41, &H655B59C3 385 | md5_II d, a, b, c, x(k + 3), S42, &H8F0CCC92 386 | md5_II c, d, a, b, x(k + 10), S43, &HFFEFF47D 387 | md5_II b, c, d, a, x(k + 1), S44, &H85845DD1 388 | md5_II a, b, c, d, x(k + 8), S41, &H6FA87E4F 389 | md5_II d, a, b, c, x(k + 15), S42, &HFE2CE6E0 390 | md5_II c, d, a, b, x(k + 6), S43, &HA3014314 391 | md5_II b, c, d, a, x(k + 13), S44, &H4E0811A1 392 | md5_II a, b, c, d, x(k + 4), S41, &HF7537E82 393 | md5_II d, a, b, c, x(k + 11), S42, &HBD3AF235 394 | md5_II c, d, a, b, x(k + 2), S43, &H2AD7D2BB 395 | md5_II b, c, d, a, x(k + 9), S44, &HEB86D391 396 | 397 | a = AddUnsigned(a, AA) 398 | b = AddUnsigned(b, BB) 399 | c = AddUnsigned(c, CC) 400 | d = AddUnsigned(d, DD) 401 | Next 402 | 403 | MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d)) 404 | End Function 405 | Public Default Function To32(ByVal s) 406 | To32 = MD5(s,"utf-8") 407 | End Function 408 | End Class 409 | %> 410 | -------------------------------------------------------------------------------- /gogozhifu_Cscms/plugins/sys/admin/Pay.php: -------------------------------------------------------------------------------- 1 | load->model('Csadmin'); 14 | $this->lang->load('admin_pay'); 15 | $this->Csadmin->Admin_Login(); 16 | } 17 | 18 | public function index(){ 19 | $this->load->view('pay_setting.html'); 20 | } 21 | 22 | public function save(){ 23 | 24 | $CS_Alipay = intval($this->input->post('CS_Alipay', TRUE)); 25 | $CS_Alipay_JK = intval($this->input->post('CS_Alipay_JK', TRUE)); 26 | $CS_Alipay_ID = trim($this->input->post('CS_Alipay_ID', TRUE)); 27 | $CS_Alipay_Key = trim($this->input->post('CS_Alipay_Key', TRUE)); 28 | $CS_Alipay_Name = trim($this->input->post('CS_Alipay_Name', TRUE)); 29 | 30 | $CS_Tenpay = intval($this->input->post('CS_Tenpay', TRUE)); 31 | $CS_Tenpay_ID = trim($this->input->post('CS_Tenpay_ID', TRUE)); 32 | $CS_Tenpay_Key = trim($this->input->post('CS_Tenpay_Key', TRUE)); 33 | 34 | $CS_Wypay = intval($this->input->post('CS_Wypay', TRUE)); 35 | $CS_Wypay_ID = trim($this->input->post('CS_Wypay_ID', TRUE)); 36 | $CS_Wypay_Key = trim($this->input->post('CS_Wypay_Key', TRUE)); 37 | 38 | $CS_Ybpay = intval($this->input->post('CS_Ybpay', TRUE)); 39 | $CS_Ybpay_ID = trim($this->input->post('CS_Ybpay_ID', TRUE)); 40 | $CS_Ybpay_Key = trim($this->input->post('CS_Ybpay_Key', TRUE)); 41 | 42 | $CS_Cspay = intval($this->input->post('CS_Cspay', TRUE)); 43 | $CS_Cspay_ID = trim($this->input->post('CS_Cspay_ID', TRUE)); 44 | $CS_Cspay_Key = trim($this->input->post('CS_Cspay_Key', TRUE)); 45 | 46 | $CS_Wxpay = intval($this->input->post('CS_Wxpay', TRUE)); 47 | $CS_Wxpay_ID = trim($this->input->post('CS_Wxpay_ID', TRUE)); 48 | $CS_Wxpay_Key = trim($this->input->post('CS_Wxpay_Key', TRUE)); 49 | $CS_Wxpay_Mchid = trim($this->input->post('CS_Wxpay_Mchid', TRUE)); 50 | 51 | $CS_Ggzf = intval($this->input->post('CS_Ggzf', TRUE)); 52 | $CS_Ggzf_ID = trim($this->input->post('CS_Ggzf_ID', TRUE)); 53 | $CS_Ggzf_Key = trim($this->input->post('CS_Ggzf_Key', TRUE)); 54 | 55 | $strs="input->get_post('kstime',true); 94 | $jstime = $this->input->get_post('jstime',true); 95 | $dingdan= str_replace('%','',$this->input->get_post('dingdan',true)); 96 | $pid = intval($this->input->get_post('pid')); 97 | $zd = $this->input->get_post('zd',true); 98 | $key = $this->input->get_post('key',true); 99 | $page = intval($this->input->get('page')); 100 | if($page==0) $page=1; 101 | $kstimes=empty($kstime)?0:strtotime($kstime)-86400; 102 | $jstimes=empty($jstime)?0:strtotime($jstime)+86400; 103 | if($kstimes>$jstimes) $kstimes=strtotime($kstime); 104 | 105 | $data['page'] = $page; 106 | $data['dingdan'] = $dingdan; 107 | $data['pid'] = $pid; 108 | $data['zd'] = $zd; 109 | $data['key'] = $key; 110 | $data['kstime'] = $kstime; 111 | $data['jstime'] = $jstime; 112 | 113 | $sql_string = "SELECT * FROM ".CS_SqlPrefix."pay where 1=1"; 114 | if($pid>0){ 115 | $sql_string.= " and pid=".($pid-1).""; 116 | } 117 | if(!empty($dingdan)){ 118 | $sql_string.= " and dingdan like '%".$dingdan."%'"; 119 | } 120 | if(!empty($key)){ 121 | if($zd=='name'){ 122 | $uid=getzd('user','id',$key,'name'); 123 | }else{ 124 | $uid=$key; 125 | } 126 | $sql_string.= " and uid=".intval($uid).""; 127 | } 128 | if($kstimes>0){ 129 | $sql_string.= " and addtime>".$kstimes.""; 130 | } 131 | if($jstimes>0){ 132 | $sql_string.= " and addtime<".$jstimes.""; 133 | } 134 | $sql_string.= " order by addtime desc"; 135 | $count_sql = str_replace('*','count(*) as count',$sql_string); 136 | $query = $this->db->query($count_sql)->result_array(); 137 | $total = $query[0]['count']; 138 | 139 | $base_url = site_url('pay/lists')."?dingdan=".$dingdan."&zd=".$zd."&kstime=".$kstime."&jstime=".$jstime."&key=".$key."&pid=".$pid."&page="; 140 | $per_page = 15; 141 | $totalPages = ceil($total / $per_page)?ceil($total / $per_page):1; // 总页数 142 | $page = ($page>$totalPages)?$totalPages:$page; 143 | $data['nums'] = $total; 144 | if($total<$per_page){ 145 | $per_page=$total; 146 | } 147 | $sql_string.=' limit '. $per_page*($page-1) .','. $per_page; 148 | $query = $this->db->query($sql_string); 149 | 150 | $data['pay'] = $query->result(); 151 | $data['page_data'] = page_data($total,$page,$totalPages); 152 | $data['page_list'] = admin_page($base_url,$page,$totalPages); //获取分页类 153 | $this->load->view('pay_list.html',$data); 154 | } 155 | 156 | //强制更新订单到成功 157 | public function init(){ 158 | $id = intval($this->input->get('id')); 159 | $row=$this->db->query("SELECT * FROM ".CS_SqlPrefix."pay where id=".$id."")->row(); 160 | if($row){ 161 | $edit['pid']=1; 162 | $this->Csdb->get_update('pay',$id,$edit); 163 | //给会员增加金钱 164 | $this->db->query("update ".CS_SqlPrefix."user set rmb=rmb+".$row->rmb." where id=".$row->uid.""); 165 | //发送邮件 166 | $email=getzd('user','email',$row->uid); 167 | $this->load->model('Csemail'); 168 | $title = L('plub_02',array($row->rmb)); 169 | $this->Csemail->send($email,L('plub_03'),$title); //发送通知邮件 170 | } 171 | $info['url'] = site_url('pay/lists').'?v='.rand(1000,9999); 172 | $info['msg'] = L('plub_04'); 173 | getjson($info,0); 174 | } 175 | 176 | //支付订单删除 177 | public function del(){ 178 | $id = $this->input->get_post('id',true); 179 | if(empty($id)) getjson(L('plub_05')); 180 | $this->Csdb->get_del('pay',$id); 181 | $info['url'] = site_url('pay/lists').'?v='.rand(1000,9999); 182 | getjson($info,0); 183 | } 184 | 185 | //消费记录列表 186 | public function spend(){ 187 | $kstime = $this->input->get_post('kstime',true); 188 | $jstime = $this->input->get_post('jstime',true); 189 | $sid = intval($this->input->get_post('sid')); 190 | $dir = $this->input->get_post('dir',true); 191 | $zd = $this->input->get_post('zd',true); 192 | $key = $this->input->get_post('key',true); 193 | $page = intval($this->input->get('page')); 194 | if($page==0) $page=1; 195 | $kstimes=empty($kstime)?0:strtotime($kstime)-86400; 196 | $jstimes=empty($jstime)?0:strtotime($jstime)+86400; 197 | if($kstimes>$jstimes) $kstimes=strtotime($kstime); 198 | 199 | $data['page'] = $page; 200 | $data['dir'] = $dir; 201 | $data['sid'] = $sid; 202 | $data['zd'] = $zd; 203 | $data['key'] = $key; 204 | $data['kstime'] = $kstime; 205 | $data['jstime'] = $jstime; 206 | 207 | $sql_string = "SELECT * FROM ".CS_SqlPrefix."spend where 1=1"; 208 | if($sid>0){ 209 | $sql_string.= " and sid=".($sid-1).""; 210 | } 211 | if(!empty($key)){ 212 | if($zd=='name'){ 213 | $uid=getzd('user','id',$key,'name'); 214 | }else{ 215 | $uid=$key; 216 | } 217 | $sql_string.= " and uid=".intval($uid).""; 218 | } 219 | if(!empty($dir)){ 220 | $sql_string.= " and dir='".$dir."'"; 221 | } 222 | if($kstimes>0){ 223 | $sql_string.= " and addtime>".$kstimes.""; 224 | } 225 | if($jstimes>0){ 226 | $sql_string.= " and addtime<".$jstimes.""; 227 | } 228 | $sql_string.= " order by addtime desc"; 229 | $count_sql = str_replace('*','count(*) as count',$sql_string); 230 | $query = $this->db->query($count_sql)->result_array(); 231 | $total = $query[0]['count']; 232 | 233 | $per_page = 15; 234 | $totalPages = ceil($total / $per_page)?ceil($total / $per_page):1; // 总页数 235 | $page = ($page>$totalPages)?$totalPages:$page; 236 | $data['nums'] = $total; 237 | if($total<$per_page){ 238 | $per_page=$total; 239 | } 240 | $sql_string.=' limit '. $per_page*($page-1) .','. $per_page; 241 | $query = $this->db->query($sql_string); 242 | 243 | $base_url = site_url('pay/spend')."?dir=".$dir."&zd=".$zd."&kstime=".$kstime."&jstime=".$jstime."&key=".$key."&sid=".$sid."&page="; 244 | $data['spend'] = $query->result(); 245 | $data['page_data'] = page_data($total,$page,$totalPages); 246 | $data['page_list'] = admin_page($base_url,$page,$totalPages); //获取分页类 247 | $this->load->view('pay_spend.html',$data); 248 | } 249 | 250 | //消费记录删除 251 | public function spend_del(){ 252 | $id = $this->input->get_post('id',true); 253 | if(empty($id)) getjson(L('plub_05')); 254 | $this->Csdb->get_del('spend',$id); 255 | $info['url'] = site_url('pay/spend').'?v='.rand(1000,9999); 256 | getjson($info,0); 257 | } 258 | 259 | //分成记录列表 260 | public function income(){ 261 | $kstime = $this->input->get_post('kstime',true); 262 | $jstime = $this->input->get_post('jstime',true); 263 | $dir = $this->input->get_post('dir',true); 264 | $sid = intval($this->input->get_post('sid')); 265 | $zd = $this->input->get_post('zd',true); 266 | $key = $this->input->get_post('key',true); 267 | $page = intval($this->input->get('page')); 268 | if($page==0) $page=1; 269 | $kstimes=empty($kstime)?0:strtotime($kstime)-86400; 270 | $jstimes=empty($jstime)?0:strtotime($jstime)+86400; 271 | if($kstimes>$jstimes) $kstimes=strtotime($kstime); 272 | 273 | $data['page'] = $page; 274 | $data['dir'] = $dir; 275 | $data['sid'] = $sid; 276 | $data['zd'] = $zd; 277 | $data['key'] = $key; 278 | $data['kstime'] = $kstime; 279 | $data['jstime'] = $jstime; 280 | 281 | $sql_string = "SELECT * FROM ".CS_SqlPrefix."income where 1=1"; 282 | if($sid>0){ 283 | $sql_string.= " and sid=".($sid-1).""; 284 | } 285 | if(!empty($key)){ 286 | if($zd=='name'){ 287 | $uid=getzd('user','id',$key,'name'); 288 | }else{ 289 | $uid=$key; 290 | } 291 | $sql_string.= " and uid=".intval($uid).""; 292 | } 293 | if(!empty($dir)){ 294 | $sql_string.= " and dir='".$dir."'"; 295 | } 296 | if($kstimes>0){ 297 | $sql_string.= " and addtime>".$kstimes.""; 298 | } 299 | if($jstimes>0){ 300 | $sql_string.= " and addtime<".$jstimes.""; 301 | } 302 | $sql_string.= " order by addtime desc"; 303 | $count_sql = str_replace('*','count(*) as count',$sql_string); 304 | $query = $this->db->query($count_sql)->result_array(); 305 | $total = $query[0]['count']; 306 | 307 | $per_page = 15; 308 | $totalPages = ceil($total / $per_page)?ceil($total / $per_page):1; // 总页数 309 | $page = ($page>$totalPages)?$totalPages:$page; 310 | $data['nums'] = $total; 311 | if($total<$per_page){ 312 | $per_page=$total; 313 | } 314 | $sql_string.=' limit '. $per_page*($page-1) .','. $per_page; 315 | $query = $this->db->query($sql_string); 316 | $data['income'] = $query->result(); 317 | 318 | $base_url = site_url('pay/income')."?dir=".$dir."&zd=".$zd."&kstime=".$kstime."&jstime=".$jstime."&key=".$key."&sid=".$sid."&page="; 319 | $data['page_data'] = page_data($total,$page,$totalPages); 320 | $data['page_list'] = admin_page($base_url,$page,$totalPages); //获取分页类 321 | $this->load->view('pay_income.html',$data); 322 | } 323 | 324 | //分成记录删除 325 | public function income_del(){ 326 | $id = $this->input->get_post('id',true); 327 | if(empty($id)) getjson(L('plub_05')); 328 | $this->Csdb->get_del('income',$id); 329 | $info['url'] = site_url('pay/income').'?v='.rand(1000,9999); 330 | getjson($info,0); 331 | } 332 | 333 | //充值卡列表 334 | public function card(){ 335 | $card = str_replace('%','',$this->input->get_post('card',true)); 336 | $sid = intval($this->input->get_post('sid')); 337 | $zd = $this->input->get_post('zd',true); 338 | $key = $this->input->get_post('key',true); 339 | $page = intval($this->input->get('page')); 340 | if($page==0) $page=1; 341 | 342 | $data['sid'] = $sid; 343 | $data['zd'] = $zd; 344 | $data['key'] = $key; 345 | $data['card'] = $card; 346 | 347 | $sql_string = "SELECT * FROM ".CS_SqlPrefix."paycard where 1=1"; 348 | if(!empty($card)){ 349 | $sql_string.= " and card like '%".$card."%'"; 350 | } 351 | if($sid==1){ 352 | $sql_string.= " and uid>0"; 353 | } 354 | if($sid==2){ 355 | $sql_string.= " and uid=0"; 356 | } 357 | if(!empty($key)){ 358 | if($zd=='name'){ 359 | $uid=getzd('user','id',$key,'name'); 360 | }else{ 361 | $uid=$key; 362 | } 363 | $sql_string.= " and uid=".intval($uid).""; 364 | } 365 | 366 | $sql_string.= " order by addtime desc"; 367 | $count_sql = str_replace('*','count(*) as count',$sql_string); 368 | $query = $this->db->query($count_sql)->result_array(); 369 | $total = $query[0]['count']; 370 | 371 | $per_page = 15; 372 | $totalPages = ceil($total / $per_page)?ceil($total / $per_page):1; // 总页数 373 | $pag = ($page>$totalPages)?$totalPages:$page; 374 | $data['nums'] = $total; 375 | if($total<$per_page){ 376 | $per_page=$total; 377 | } 378 | $sql_string.=' limit '. $per_page*($page-1) .','. $per_page; 379 | $query = $this->db->query($sql_string); 380 | $data['paycard'] = $query->result(); 381 | 382 | $base_url = site_url('pay/card')."?zd=".$zd."&card=".$card."&key=".$key."&sid=".$sid."&page="; 383 | $data['page_data'] = page_data($total,$page,$totalPages); 384 | $data['page_list'] = admin_page($base_url,$page,$totalPages); //获取分页类 385 | $this->load->view('pay_card.html',$data); 386 | } 387 | 388 | //新增充值卡 389 | public function card_add(){ 390 | $this->load->view('pay_card_add.html'); 391 | } 392 | 393 | //生成充值卡 394 | public function card_save(){ 395 | $this->load->helper('string'); 396 | $rmb = intval($this->input->post('rmb')); 397 | $nums = intval($this->input->post('nums')); 398 | for($j=0;$j<$nums;$j++){ 399 | $add['rmb']=$rmb; 400 | $add['card']=date('Ymd').random_string('alnum',10); 401 | $add['pass']=random_string('alnum',6); 402 | $add['addtime']=time(); 403 | $this->Csdb->get_insert('paycard',$add); 404 | } 405 | $info['url'] = site_url('pay/card').'?v='.rand(1000,9999); 406 | $info['parent'] = 1; 407 | getjson($info,0); 408 | } 409 | 410 | //删除充值卡 411 | public function card_del(){ 412 | $id = $this->input->get_post('id',true); 413 | if(empty($id)) getjson(L('plub_05')); 414 | $this->Csdb->get_del('paycard',$id); 415 | $info['url'] = site_url('pay/card').'?v='.rand(1000,9999); 416 | getjson($info,0); 417 | } 418 | public function card_look(){ 419 | $id = intval($this->input->get_post('id',true)); 420 | $card = $this->db->query("select * from ".CS_SqlPrefix."paycard where id=".$id)->row(); 421 | $data['card'] = $card; 422 | $this->load->view('pay_card_look.html',$data); 423 | } 424 | } -------------------------------------------------------------------------------- /gogozhifu_Cscms/tpl/admin/sys/pay_setting.html: -------------------------------------------------------------------------------- 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 |
  • GOGO支付
  • 31 |
32 |
33 |
34 |
35 | 36 |
37 | > 38 | > 39 |
40 |
41 |
> 42 |
43 | 44 | 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 | 76 |
77 |
78 | 79 |
80 | > 81 | > 82 |
83 |
84 |
> 85 |
86 | 87 |
88 | 89 |
90 |
91 |
92 | 93 |
94 | 95 |
96 |
97 |
98 | 99 |
100 | 101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 | 109 |
110 | > 111 | > 112 |
113 |
114 |
> 115 |
116 | 117 | 120 |
121 |
122 | 123 |
124 | 125 |
126 |
127 |
128 | 129 |
130 | 131 |
132 |
133 |
134 | 135 |
136 | 137 |
138 |
139 |
140 |
141 |
142 |
143 | 144 |
145 | > 146 | > 147 |
148 |
149 |
> 150 |
151 | 152 | 155 |
156 |
157 | 158 |
159 | 160 |
161 |
162 |
163 | 164 |
165 | 166 |
167 |
168 |
169 |
170 |
171 |
172 | 173 |
174 | > 175 | > 176 |
177 |
178 |
> 179 |
180 | 181 | 184 |
185 |
186 | 187 |
188 | 189 |
190 |
191 |
192 | 193 |
194 | 195 |
196 |
197 |
198 |
199 |
200 |
201 | 202 |
203 | > 204 | > 205 |
206 |
207 |
> 208 |
209 | 210 | 213 |
214 |
215 | 216 |
217 | 218 |
219 |
220 |
221 | 222 |
223 | 224 |
225 |
226 |
227 |
228 | 229 |
230 |
231 | 232 |
233 | > 234 | > 235 |
236 |
237 |
> 238 | 244 |
245 | 246 |
247 | 248 |
249 |
250 |
251 | 252 |
253 | 254 |
255 |
256 |
257 |
258 | 259 |
260 |
261 |
262 | 263 | 264 |
265 |
266 |
267 |
268 | 271 | 272 | --------------------------------------------------------------------------------