Browse Source

头像上传

master
ZLW-PC\Administrator 7 years ago
parent
commit
f6fb967325
  1. 1
      app/Http/Controllers/Api/UserController.php
  2. 36
      app/Http/Controllers/Weixin/UserController.php
  3. 1
      app/Http/Kernel.php
  4. 24
      app/Http/Middleware/WxLogin.php
  5. 10
      public/css/weixin/style.css
  6. 1277
      public/js/jquery-form.js
  7. 10
      resources/org/wxpay/SDKRuntimeException.class.php
  8. 959
      resources/org/wxpay/WxPayPubHelper.class.php
  9. 26
      resources/org/wxpay/cert/apiclient_cert.pem
  10. 28
      resources/org/wxpay/cert/apiclient_key.pem
  11. 144
      resources/org/wxpay/demo.php
  12. 50
      resources/org/wxpay/wxt.html
  13. 0
      resources/org/wxpay/说明.txt
  14. 15
      resources/views/weixin/user/index.blade.php
  15. 99
      resources/views/weixin/user/login.blade.php
  16. 4
      resources/views/weixin/user/userAccount.blade.php
  17. 121
      resources/views/weixin/user/userinfo.blade.php
  18. 19
      routes/web.php

1
app/Http/Controllers/Api/UserController.php

@ -46,6 +46,7 @@ class UserController extends CommonController
if($request->input('status', null)!==null){$data['status'] = $request->input('status');} if($request->input('status', null)!==null){$data['status'] = $request->input('status');}
if($request->input('group_id', null)!==null){$data['group_id'] = $request->input('group_id');} if($request->input('group_id', null)!==null){$data['group_id'] = $request->input('group_id');}
if($request->input('password', null)!==null){$data['password'] = $request->input('password');} if($request->input('password', null)!==null){$data['password'] = $request->input('password');}
if($request->input('head_img', null)!==null){$data['head_img'] = $request->input('head_img');}
if ($data != '') if ($data != '')
{ {

36
app/Http/Controllers/Weixin/UserController.php

@ -15,7 +15,7 @@ class UserController extends CommonController
//个人中心 //个人中心
public function index(Request $request) public function index(Request $request)
{ {
$_SESSION['weixin_user_info']['access_token'] = '72d623d26a1a6d61186a97f9ccf752f7';
//$_SESSION['weixin_user_info']['access_token'] = '72d623d26a1a6d61186a97f9ccf752f7';
//获取会员信息 //获取会员信息
$postdata = array( $postdata = array(
@ -28,6 +28,20 @@ class UserController extends CommonController
return view('weixin.user.index', $data); return view('weixin.user.index', $data);
} }
//个人中心设置
public function userinfo(Request $request)
{
//获取会员信息
$postdata = array(
'access_token' => $_SESSION['weixin_user_info']['access_token']
);
$url = env('APP_API_URL')."/user_info";
$res = curl_request($url,$postdata,'GET');
$data['user_info'] = $res['data'];
return view('weixin.user.userinfo', $data);
}
//资金管理 //资金管理
public function userAccount(Request $request) public function userAccount(Request $request)
{ {
@ -208,4 +222,24 @@ class UserController extends CommonController
$this->success_jump(ReturnCode::SUCCESS); $this->success_jump(ReturnCode::SUCCESS);
} }
//登录
public function login(Request $request)
{
if(isset($_SESSION['weixin_user_info']))
{
if(isset($_SERVER["HTTP_REFERER"])){header('Location: '.$_SERVER["HTTP_REFERER"]);exit;}
header('Location: '.route('weixin_user'));exit;
}
return view('weixin.user.login');
}
public function logout(Request $request)
{
session_unset();
session_destroy();// 退出登录,清除session
$this->success_jump('退出成功',route('weixin'));
}
} }

1
app/Http/Kernel.php

@ -61,5 +61,6 @@ class Kernel extends HttpKernel
'token' => \App\Http\Middleware\TokenAuth::class, //Token验证,FLi 'token' => \App\Http\Middleware\TokenAuth::class, //Token验证,FLi
'sign' => \App\Http\Middleware\Sign::class, //Sign验证,FLi 'sign' => \App\Http\Middleware\Sign::class, //Sign验证,FLi
'wxlogin' => \App\Http\Middleware\WxLogin::class, //微信端登录验证,FLi
]; ];
} }

24
app/Http/Middleware/WxLogin.php

@ -0,0 +1,24 @@
<?php
namespace App\Http\Middleware;
use Closure;
class WxLogin
{
/**
* 微信端登录验证
*/
public function handle($request, Closure $next)
{
if(isset($_SESSION['weixin_user_info']))
{
}
else
{
header('Location: '.route('weixin'));exit;
}
return $next($request);
}
}

10
public/css/weixin/style.css

@ -777,7 +777,15 @@ h1.arc_tit, h2.arc_tit{font-weight: normal;font-size: 1.4em;padding: 10px;}
.arclist li a{color:#333;display:block;}.arclist li p{color:#999;font-size:14px;}.arclist li:last-child{border-bottom:0} .arclist li a{color:#333;display:block;}.arclist li p{color:#999;font-size:14px;}.arclist li:last-child{border-bottom:0}
.arclist .gpic{width:80px;height:60px;float:left;margin-right:10px;display:block;}.arclist .gpic img{width:80px;height:60px;border:none;} .arclist .gpic{width:80px;height:60px;float:left;margin-right:10px;display:block;}.arclist .gpic img{width:80px;height:60px;border:none;}
.fui-list{background-color:#fff;width:100%;}
.fui-list li{padding-left:10px;padding-right:10px;line-height:44px;position:relative;display:-webkit-box;border-bottom:1px solid #e0e0e0;}
.fui-list .ui-list-info{-webkit-box-orient:horizontal;-webkit-box-align:center;-webkit-box-flex:1;display:-webkit-box;-webkit-box-pack:center;padding-right:15px;}
.fui-list li h4{font-size:16px;-webkit-box-flex:1;}
.fui-list .ui-nowrap{font-weight:400;max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
.fui-list .ui-txt-info{color:#999;}
.fui-list li i{font-size:32px;line-height:44px;font-style:normal;-webkit-font-smoothing:antialiased;-webkit-text-stroke-width:.2px;display:block;color:#c7c7c7;position:absolute;right:25px;top:50%;margin-top:-22px;margin-right:-10px;}
.fui-list .ui-list-thumb{width:50px;height:50px;position:relative;margin:10px 10px 10px 0;}
.fui-list .ui-list-thumb>span{display:block;width:100%;height:100%;z-index:1;background-repeat:no-repeat;-webkit-background-size:cover;}.ui-list-thumb img{display:block;width:100%;height:100%;}

1277
public/js/jquery-form.js
File diff suppressed because it is too large
View File

10
resources/org/wxpay/SDKRuntimeException.class.php

@ -0,0 +1,10 @@
<?php
class SDKRuntimeException extends Exception
{
public function errorMessage()
{
return $this->getMessage();
}
}
?>

959
resources/org/wxpay/WxPayPubHelper.class.php

@ -0,0 +1,959 @@
<?php
/**
* 微信支付帮助库
* ====================================================
* 接口分三种类型:
* 【请求型接口】--Wxpay_client_
* 统一支付接口类--UnifiedOrder
* 订单查询接口--OrderQuery
* 退款申请接口--Refund
* 退款查询接口--RefundQuery
* 对账单接口--DownloadBill
* 短链接转换接口--ShortUrl
* 【响应型接口】--Wxpay_server_
* 通用通知接口--Notify
* Native支付——请求商家获取商品信息接口--NativeCall
* 【其他】
* 静态链接二维码--NativeLink
* JSAPI支付--JsApi
* =====================================================
* 【CommonUtil】常用工具:
* trimString(),设置参数时需要用到的字符处理函数
* createNoncestr(),产生随机字符串,不长于32位
* formatBizQueryParaMap(),格式化参数,签名过程需要用到
* getSign(),生成签名
* arrayToXml(),array转xml
* xmlToArray(),xml转 array
* postXmlCurl(),以post方式提交xml到对应的接口url
* postXmlSSLCurl(),使用证书,以post方式提交xml到对应的接口url
*/
include_once("SDKRuntimeException.class.php");
/**
* 所有接口的基类
*/
class Common_util_pub
{
public $wxconfig;
public function __construct($wxconfig)
{
$this->wxconfig=$wxconfig;
}
function trimString($value)
{
$ret = null;
if (null != $value)
{
$ret = $value;
if (strlen($ret) == 0)
{
$ret = null;
}
}
return $ret;
}
/**
* 作用:产生随机字符串,不长于32位
*/
public function createNoncestr( $length = 32 )
{
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
$str ="";
for ( $i = 0; $i < $length; $i++ )
{
$str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);
}
return $str;
}
/**
* 作用:格式化参数,签名过程需要使用
*/
function formatBizQueryParaMap($paraMap, $urlencode)
{
$buff = "";
ksort($paraMap);
foreach ($paraMap as $k => $v)
{
if($urlencode)
{
$v = urlencode($v);
}
//$buff .= strtolower($k) . "=" . $v . "&";
$buff .= $k . "=" . $v . "&";
}
$reqPar = "";
if (strlen($buff) > 0)
{
$reqPar = substr($buff, 0, strlen($buff)-1);
}
return $reqPar;
}
/**
* 作用:生成签名
*/
public function getSign($Obj)
{
foreach ($Obj as $k => $v)
{
$Parameters[$k] = $v;
}
//签名步骤一:按字典序排序参数
ksort($Parameters);
$String = $this->formatBizQueryParaMap($Parameters, false);
//echo '【string1】'.$String.'</br>';
//签名步骤二:在string后加入KEY
$String = $String."&key=".$this->wxconfig['KEY'];
//echo "【string2】".$String."</br>";
//签名步骤三:MD5加密
$String = md5($String);
//echo "【string3】 ".$String."</br>";
//签名步骤四:所有字符转为大写
$result_ = strtoupper($String);
//echo "【result】 ".$result_."</br>";
return $result_;
}
/**
* 作用:array转xml
*/
function arrayToXml($arr)
{
$xml = "<xml>";
foreach ($arr as $key=>$val)
{
if (is_numeric($val))
{
$xml.="<".$key.">".$val."</".$key.">";
}
else
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
$xml.="</xml>";
return $xml;
}
/**
* 作用:将xml转为array
*/
public function xmlToArray($xml)
{
//将XML转为array
$array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $array_data;
}
/**
* 作用:以post方式提交xml到对应的接口url
*/
public function postXmlCurl($xml,$url,$second=30)
{
//初始化curl
$ch = curl_init();
//设置超时
curl_setopt($ch, CURLOP_TIMEOUT, $second);
//这里设置代理,如果有的话
//curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
//设置header
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//post提交方式
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
//运行curl
$data = curl_exec($ch);
curl_close($ch);
//返回结果
if($data)
{
curl_close($ch);
return $data;
}
else
{
$error = curl_errno($ch);
echo "curl出错,错误码:$error"."<br>";
echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";
curl_close($ch);
return false;
}
}
/**
* 作用:使用证书,以post方式提交xml到对应的接口url
*/
function postXmlSSLCurl($xml,$url,$second=30)
{
$ch = curl_init();
//超时时间
curl_setopt($ch,CURLOPT_TIMEOUT,$second);
//这里设置代理,如果有的话
//curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');
//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
//设置header
curl_setopt($ch,CURLOPT_HEADER,FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
//设置证书
//使用证书:cert 与 key 分别属于两个.pem文件
//默认格式为PEM,可以注释
curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLCERT, $this->wxconfig['SSLCERT_PATH']);
//默认格式为PEM,可以注释
curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
curl_setopt($ch,CURLOPT_SSLKEY, $this->wxconfig['SSLKEY_PATH']);
//post提交方式
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
$data = curl_exec($ch);
//返回结果
if($data){
curl_close($ch);
return $data;
}
else {
$error = curl_errno($ch);
echo "curl出错,错误码:$error"."<br>";
echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";
curl_close($ch);
return false;
}
}
/**
* 作用:打印数组
*/
function printErr($wording='',$err='')
{
print_r('<pre>');
echo $wording."</br>";
var_dump($err);
print_r('</pre>');
}
}
/**
* 请求型接口的基类
*/
class Wxpay_client_pub extends Common_util_pub
{
var $parameters;//请求参数,类型为关联数组
public $response;//微信返回的响应
public $result;//返回参数,类型为关联数组
var $url;//接口链接
var $curl_timeout;//curl超时时间
/**
* 作用:设置请求参数
*/
function setParameter($parameter, $parameterValue)
{
$this->parameters[$this->trimString($parameter)] = $this->trimString($parameterValue);
}
/**
* 作用:设置标配的请求参数,生成签名,生成接口参数xml
*/
function createXml()
{
$this->parameters["appid"] = $this->wxconfig['APPID'];//公众账号ID
$this->parameters["mch_id"] = $this->wxconfig['MCHID'];//商户号
$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串
$this->parameters["sign"] = $this->getSign($this->parameters);//签名
return $this->arrayToXml($this->parameters);
}
/**
* 作用:post请求xml
*/
function postXml()
{
$xml = $this->createXml();
$this->response = $this->postXmlCurl($xml,$this->url,$this->curl_timeout);
return $this->response;
}
/**
* 作用:使用证书post请求xml
*/
function postXmlSSL()
{
$xml = $this->createXml();
$this->response = $this->postXmlSSLCurl($xml,$this->url,$this->curl_timeout);
return $this->response;
}
/**
* 作用:获取结果,默认不使用证书
*/
function getResult()
{
$this->postXml();
$this->result = $this->xmlToArray($this->response);
return $this->result;
}
}
/**
* 统一支付接口类
*/
class UnifiedOrder_pub extends Wxpay_client_pub
{
function __construct($appconfig)
{
Common_util_pub::__construct($appconfig);
//设置接口链接
$this->url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
//设置curl超时时间
$this->curl_timeout = $this->wxconfig['CURL_TIMEOUT'];
}
/**
* 生成接口参数xml
*/
function createXml()
{
try
{
//检测必填参数
if($this->parameters["out_trade_no"] == null)
{
throw new SDKRuntimeException("缺少统一支付接口必填参数out_trade_no!"."<br>");
}elseif($this->parameters["body"] == null){
throw new SDKRuntimeException("缺少统一支付接口必填参数body!"."<br>");
}elseif ($this->parameters["total_fee"] == null ) {
throw new SDKRuntimeException("缺少统一支付接口必填参数total_fee!"."<br>");
}elseif ($this->parameters["notify_url"] == null) {
throw new SDKRuntimeException("缺少统一支付接口必填参数notify_url!"."<br>");
}elseif ($this->parameters["trade_type"] == null) {
throw new SDKRuntimeException("缺少统一支付接口必填参数trade_type!"."<br>");
}elseif ($this->parameters["trade_type"] == "JSAPI" &&
$this->parameters["openid"] == NULL){
throw new SDKRuntimeException("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!"."<br>");
}
$this->parameters["appid"] = $this->wxconfig['APPID'];//公众账号ID
$this->parameters["mch_id"] = $this->wxconfig['MCHID'];//商户号
$this->parameters["spbill_create_ip"] = $_SERVER['REMOTE_ADDR'];//终端ip
$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串
$this->parameters["sign"] = $this->getSign($this->parameters);//签名
return $this->arrayToXml($this->parameters);
}
catch (SDKRuntimeException $e)
{
die($e->errorMessage());
}
}
/**
* 获取prepay_id
*/
function getPrepayId()
{
$this->postXml();
$this->result = $this->xmlToArray($this->response);
$prepay_id = $this->result["prepay_id"];
return $prepay_id;
}
}
/**
* 订单查询接口
*/
class OrderQuery_pub extends Wxpay_client_pub
{
function __construct()
{
//设置接口链接
$this->url = "https://api.mch.weixin.qq.com/pay/orderquery";
//设置curl超时时间
$this->curl_timeout = $this->wxconfig['CURL_TIMEOUT'];
}
/**
* 生成接口参数xml
*/
function createXml()
{
try
{
//检测必填参数
if($this->parameters["out_trade_no"] == null &&
$this->parameters["transaction_id"] == null)
{
throw new SDKRuntimeException("订单查询接口中,out_trade_no、transaction_id至少填一个!"."<br>");
}
$this->parameters["appid"] = $this->wxconfig['APPID'];//公众账号ID
$this->parameters["mch_id"] = $this->wxconfig['MCHID'];//商户号
$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串
$this->parameters["sign"] = $this->getSign($this->parameters);//签名
return $this->arrayToXml($this->parameters);
}catch (SDKRuntimeException $e)
{
die($e->errorMessage());
}
}
}
/**
* 退款申请接口
*/
class Refund_pub extends Wxpay_client_pub
{
function __construct()
{
//设置接口链接
$this->url = "https://api.mch.weixin.qq.com/secapi/pay/refund";
//设置curl超时时间
$this->curl_timeout = $this->wxconfig['CURL_TIMEOUT'];
}
/**
* 生成接口参数xml
*/
function createXml()
{
try
{
//检测必填参数
if($this->parameters["out_trade_no"] == null && $this->parameters["transaction_id"] == null) {
throw new SDKRuntimeException("退款申请接口中,out_trade_no、transaction_id至少填一个!"."<br>");
}elseif($this->parameters["out_refund_no"] == null){
throw new SDKRuntimeException("退款申请接口中,缺少必填参数out_refund_no!"."<br>");
}elseif($this->parameters["total_fee"] == null){
throw new SDKRuntimeException("退款申请接口中,缺少必填参数total_fee!"."<br>");
}elseif($this->parameters["refund_fee"] == null){
throw new SDKRuntimeException("退款申请接口中,缺少必填参数refund_fee!"."<br>");
}elseif($this->parameters["op_user_id"] == null){
throw new SDKRuntimeException("退款申请接口中,缺少必填参数op_user_id!"."<br>");
}
$this->parameters["appid"] = $this->wxconfig['APPID'];//公众账号ID
$this->parameters["mch_id"] = $this->wxconfig['MCHID'];//商户号
$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串
$this->parameters["sign"] = $this->getSign($this->parameters);//签名
return $this->arrayToXml($this->parameters);
}catch (SDKRuntimeException $e)
{
die($e->errorMessage());
}
}
/**
* 作用:获取结果,使用证书通信
*/
function getResult()
{
$this->postXmlSSL();
$this->result = $this->xmlToArray($this->response);
return $this->result;
}
}
/**
* 退款查询接口
*/
class RefundQuery_pub extends Wxpay_client_pub
{
function __construct()
{
//设置接口链接
$this->url = "https://api.mch.weixin.qq.com/pay/refundquery";
//设置curl超时时间
$this->curl_timeout = $this->wxconfig['CURL_TIMEOUT'];
}
/**
* 生成接口参数xml
*/
function createXml()
{
try
{
if($this->parameters["out_refund_no"] == null &&
$this->parameters["out_trade_no"] == null &&
$this->parameters["transaction_id"] == null &&
$this->parameters["refund_id "] == null)
{
throw new SDKRuntimeException("退款查询接口中,out_refund_no、out_trade_no、transaction_id、refund_id四个参数必填一个!"."<br>");
}
$this->parameters["appid"] = $this->wxconfig['APPID'];//公众账号ID
$this->parameters["mch_id"] = $this->wxconfig['MCHID'];//商户号
$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串
$this->parameters["sign"] = $this->getSign($this->parameters);//签名
return $this->arrayToXml($this->parameters);
}
catch (SDKRuntimeException $e)
{
die($e->errorMessage());
}
}
/**
* 作用:获取结果,使用证书通信
*/
function getResult()
{
$this->postXmlSSL();
$this->result = $this->xmlToArray($this->response);
return $this->result;
}
}
/**
* 对账单接口
*/
class DownloadBill_pub extends Wxpay_client_pub
{
function __construct()
{
//设置接口链接
$this->url = "https://api.mch.weixin.qq.com/pay/downloadbill";
//设置curl超时时间
$this->curl_timeout = $this->wxconfig['CURL_TIMEOUT'];
}
/**
* 生成接口参数xml
*/
function createXml()
{
try
{
if($this->parameters["bill_date"] == null )
{
throw new SDKRuntimeException("对账单接口中,缺少必填参数bill_date!"."<br>");
}
$this->parameters["appid"] = $this->wxconfig['APPID'];//公众账号ID
$this->parameters["mch_id"] = $this->wxconfig['MCHID'];//商户号
$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串
$this->parameters["sign"] = $this->getSign($this->parameters);//签名
return $this->arrayToXml($this->parameters);
}
catch (SDKRuntimeException $e)
{
die($e->errorMessage());
}
}
/**
* 作用:获取结果,默认不使用证书
*/
function getResult()
{
$this->postXml();
$this->result = $this->xmlToArray($this->result_xml);
return $this->result;
}
}
/**
* 短链接转换接口
*/
class ShortUrl_pub extends Wxpay_client_pub
{
function __construct()
{
//设置接口链接
$this->url = "https://api.mch.weixin.qq.com/tools/shorturl";
//设置curl超时时间
$this->curl_timeout = $this->wxconfig['CURL_TIMEOUT'];
}
/**
* 生成接口参数xml
*/
function createXml()
{
try
{
if($this->parameters["long_url"] == null )
{
throw new SDKRuntimeException("短链接转换接口中,缺少必填参数long_url!"."<br>");
}
$this->parameters["appid"] = $this->wxconfig['APPID'];//公众账号ID
$this->parameters["mch_id"] = $this->wxconfig['MCHID'];//商户号
$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串
$this->parameters["sign"] = $this->getSign($this->parameters);//签名
return $this->arrayToXml($this->parameters);
}catch (SDKRuntimeException $e)
{
die($e->errorMessage());
}
}
/**
* 获取prepay_id
*/
function getShortUrl()
{
$this->postXml();
$prepay_id = $this->result["short_url"];
return $prepay_id;
}
}
/**
* 响应型接口基类
*/
class Wxpay_server_pub extends Common_util_pub
{
public $data;//接收到的数据,类型为关联数组
var $returnParameters;//返回参数,类型为关联数组
/**
* 将微信的请求xml转换成关联数组,以方便数据处理
*/
function saveData($xml)
{
$this->data = $this->xmlToArray($xml);
}
function checkSign()
{
$tmpData = $this->data;
unset($tmpData['sign']);
$sign = $this->getSign($tmpData);//本地签名
if ($this->data['sign'] == $sign) {
return TRUE;
}
return FALSE;
}
/**
* 获取微信的请求数据
*/
function getData()
{
return $this->data;
}
/**
* 设置返回微信的xml数据
*/
function setReturnParameter($parameter, $parameterValue)
{
$this->returnParameters[$this->trimString($parameter)] = $this->trimString($parameterValue);
}
/**
* 生成接口参数xml
*/
function createXml()
{
return $this->arrayToXml($this->returnParameters);
}
/**
* 将xml数据返回微信
*/
function returnXml()
{
$returnXml = $this->createXml();
return $returnXml;
}
}
/**
* 通用通知接口
*/
class Notify_pub extends Wxpay_server_pub
{
}
/**
* 请求商家获取商品信息接口
*/
class NativeCall_pub extends Wxpay_server_pub
{
/**
* 生成接口参数xml
*/
function createXml()
{
if($this->returnParameters["return_code"] == "SUCCESS"){
$this->returnParameters["appid"] = $this->wxconfig['APPID'];//公众账号ID
$this->returnParameters["mch_id"] = $this->wxconfig['MCHID'];//商户号
$this->returnParameters["nonce_str"] = $this->createNoncestr();//随机字符串
$this->returnParameters["sign"] = $this->getSign($this->returnParameters);//签名
}
return $this->arrayToXml($this->returnParameters);
}
/**
* 获取product_id
*/
function getProductId()
{
$product_id = $this->data["product_id"];
return $product_id;
}
}
/**
* 静态链接二维码
*/
class NativeLink_pub extends Common_util_pub
{
var $parameters;//静态链接参数
var $url;//静态链接
function __construct()
{
}
/**
* 设置参数
*/
function setParameter($parameter, $parameterValue)
{
$this->parameters[$this->trimString($parameter)] = $this->trimString($parameterValue);
}
/**
* 生成Native支付链接二维码
*/
function createLink()
{
try
{
if($this->parameters["product_id"] == null)
{
throw new SDKRuntimeException("缺少Native支付二维码链接必填参数product_id!"."<br>");
}
$this->parameters["appid"] = $this->wxconfig['APPID'];//公众账号ID
$this->parameters["mch_id"] = $this->wxconfig['MCHID'];//商户号
$time_stamp = time();
$this->parameters["time_stamp"] = "$time_stamp";//时间戳
$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串
$this->parameters["sign"] = $this->getSign($this->parameters);//签名
$bizString = $this->formatBizQueryParaMap($this->parameters, false);
$this->url = "weixin://wxpay/bizpayurl?".$bizString;
}catch (SDKRuntimeException $e)
{
die($e->errorMessage());
}
}
/**
* 返回链接
*/
function getUrl()
{
$this->createLink();
return $this->url;
}
}
/**
* JSAPI支付——H5网页端调起支付接口
*/
class JsApi_pub extends Common_util_pub
{
var $code;//code码,用以获取openid
var $openid;//用户的openid
var $parameters;//jsapi参数,格式为json
var $prepay_id;//使用统一支付接口得到的预支付id
var $curl_timeout;//curl超时时间
function __construct($appconfig)
{
Common_util_pub::__construct($appconfig);
//设置curl超时时间
$this->curl_timeout = $this->wxconfig['CURL_TIMEOUT'];
}
/**
* 作用:生成可以获得code的url
*/
function createOauthUrlForCode($redirectUrl)
{
$urlObj["appid"] = $this->wxconfig['APPID'];
$urlObj["redirect_uri"] = "$redirectUrl";
$urlObj["response_type"] = "code";
$urlObj["scope"] = "snsapi_base";
$urlObj["state"] = "STATE"."#wechat_redirect";
$bizString = $this->formatBizQueryParaMap($urlObj, false);
return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;
}
/**
* 作用:生成可以获得openid的url
*/
function createOauthUrlForOpenid()
{
$urlObj["appid"] = $this->wxconfig['APPID'];
$urlObj["secret"] = $this->wxconfig['APPSECRET'];
$urlObj["code"] = $this->code;
$urlObj["grant_type"] = "authorization_code";
$bizString = $this->formatBizQueryParaMap($urlObj, false);
return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString;
}
/**
* 作用:通过curl向微信提交code,以获取openid
*/
function getOpenid()
{
$url = $this->createOauthUrlForOpenid();
//初始化curl
$ch = curl_init();
//设置超时
curl_setopt($ch, CURLOP_TIMEOUT, $this->curl_timeout);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//运行curl,结果以jason形式返回
$res = curl_exec($ch);
curl_close($ch);
//取出openid
$data = json_decode($res,true);
$this->openid = $data['openid'];
return $this->openid;
}
/**
* 作用:设置prepay_id
*/
function setPrepayId($prepayId)
{
$this->prepay_id = $prepayId;
}
/**
* 作用:设置code
*/
function setCode($code_)
{
$this->code = $code_;
}
/**
* 作用:设置jsapi的参数
*/
public function getParameters()
{
$jsApiObj["appId"] = $this->wxconfig['APPID'];
$timeStamp = time();
$jsApiObj["timeStamp"] = "$timeStamp";
$jsApiObj["nonceStr"] = $this->createNoncestr();
$jsApiObj["package"] = "prepay_id=$this->prepay_id";
$jsApiObj["signType"] = "MD5";
$jsApiObj["paySign"] = $this->getSign($jsApiObj);
$this->parameters = json_encode($jsApiObj);
return $this->parameters;
}
}
/**
* 发送红包
*/
class Sendredpack extends Common_util_pub
{
function __construct($appconfig)
{
Common_util_pub::__construct($appconfig);
//设置接口链接
$this->url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
//设置curl超时时间
$this->curl_timeout = $this->wxconfig['CURL_TIMEOUT'];
}
/**
* 作用:设置请求参数
*/
function setParameter($parameter, $parameterValue)
{
$this->parameters[$this->trimString($parameter)] = $this->trimString($parameterValue);
}
function check_sign_parameters()
{
if($this->parameters["nonce_str"] == null ||
$this->parameters["mch_billno"] == null ||
$this->parameters["mch_id"] == null ||
$this->parameters["wxappid"] == null ||
$this->parameters["send_name"] == null ||
$this->parameters["re_openid"] == null ||
$this->parameters["total_amount"] == null ||
$this->parameters["total_num"] == null ||
$this->parameters["wishing"] == null ||
$this->parameters["client_ip"] == null ||
$this->parameters["act_name"] == null ||
$this->parameters["remark"] == null
)
{
return false;
}
return true;
}
//生成红包接口XML信息
/*
<xml>
<sign>![CDATA[E1EE61A9]]</sign>
<mch_billno>![CDATA[00100]]</mch_billno>
<mch_id>![CDATA[888]]</mch_id>
<wxappid>![CDATA[wxcbda96de0b165486]]</wxappid>
<send_name>![CDATA[send_name]]</send_name>
<re_openid>![CDATA[onqOjjXXXXXXXXX]]</re_openid>
<total_amount>![CDATA[100]]</total_amount>
<total_num>![CDATA[1]]</total_num>
<wishing>![CDATA[恭喜发财]]</wishing>
<client_ip>![CDATA[127.0.0.1]]</client_ip>
<act_name>![CDATA[新年红包]]</act_name>
<remark>![CDATA[新年红包]]</remark>
</xml>
*/
function createXml()
{
$this->parameters["wxappid"] = $this->wxconfig['APPID'];//公众账号ID
$this->parameters["mch_id"] = $this->wxconfig['MCHID'];//商户号
$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串
$this->parameters["sign"] = $this->getSign($this->parameters);//签名
return $this->arrayToXml($this->parameters);
}
/**
* 作用:使用证书post请求xml
*/
function postXmlSSL()
{
$xml = $this->createXml();
$this->response = $this->postXmlSSLCurl($xml,$this->url,$this->curl_timeout);
return $this->response;
}
}
?>

26
resources/org/wxpay/cert/apiclient_cert.pem

@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEXzCCA8igAwIBAgIDEN9AMA0GCSqGSIb3DQEBBQUAMIGKMQswCQYDVQQGEwJD
TjESMBAGA1UECBMJR3Vhbmdkb25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UE
ChMHVGVuY2VudDEMMAoGA1UECxMDV1hHMRMwEQYDVQQDEwpNbXBheW1jaENBMR8w
HQYJKoZIhvcNAQkBFhBtbXBheW1jaEB0ZW5jZW50MB4XDTE2MDIwMzExNDg1OVoX
DTI2MDEzMTExNDg1OVowgY8xCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlHdWFuZ2Rv
bmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5jZW50MQ4wDAYDVQQL
EwVNTVBheTEkMCIGA1UEAxQb6Ieq5Yqo5YyW5rWL6K+V5ZWG5oi35ZCN56ewMREw
DwYDVQQEEwgxMTM4NDEzMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
ALQ/qiPEwzmDLkWQhwA1Td6YQh1BxhgxH244rdpyfiiXv/m/QbYGfkJ27EZiNOkR
tZg0kOh4XGfo99bQwia+SSxPsajtnTwbGOYPKRP4Xc44SlFR9n9v3N5XzLJSXZrv
lKnz3Cf7PdHRTXxs0w0gsubMTu2P0MACLfUw11IPtGisx+SGMlgjGZ20q6suYF+R
ydUTXvHelo9R/HFfyV3RPSZryOHP1CtKMh+H1DOwdwF+d/ZIY2nkdS9HBe3Q2QD1
/Po6z1hD6LAnAdggGOyXjLNsSgkQwizQdf5Xc6xxIgLfEZlzHOM5ndLbLPovm+yP
cilvm1qu7AeKs/qodj5FU9cCAwEAAaOCAUYwggFCMAkGA1UdEwQCMAAwLAYJYIZI
AYb4QgENBB8WHSJDRVMtQ0EgR2VuZXJhdGUgQ2VydGlmaWNhdGUiMB0GA1UdDgQW
BBSRQB0ev//y8tmCeOhM6YdhH88DGzCBvwYDVR0jBIG3MIG0gBQ+BSb2ImK0FVuI
zWR+sNRip+WGdKGBkKSBjTCBijELMAkGA1UEBhMCQ04xEjAQBgNVBAgTCUd1YW5n
ZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNVBAoTB1RlbmNlbnQxDDAKBgNV
BAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEfMB0GCSqGSIb3DQEJARYQbW1w
YXltY2hAdGVuY2VudIIJALtUlyu8AOhXMA4GA1UdDwEB/wQEAwIGwDAWBgNVHSUB
Af8EDDAKBggrBgEFBQcDAjANBgkqhkiG9w0BAQUFAAOBgQADwihpkyMaJTaSII48
fFz2QbuR14op8CDqYBfF1VKRUahqFWsNEJJ+3KgRLkphwfVWSa7z1Q9EiBCGpKTI
ug7ER/ZPJUVRXZHbIkveGGV5PmBjAD544McjXHO8PGJ3AubD/iXFwYtHmLDwME8W
5nBNnaKkV4+uSPzg8UrBWbCfEw==
-----END CERTIFICATE-----

28
resources/org/wxpay/cert/apiclient_key.pem

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC0P6ojxMM5gy5F
kIcANU3emEIdQcYYMR9uOK3acn4ol7/5v0G2Bn5CduxGYjTpEbWYNJDoeFxn6PfW
0MImvkksT7Go7Z08GxjmDykT+F3OOEpRUfZ/b9zeV8yyUl2a75Sp89wn+z3R0U18
bNMNILLmzE7tj9DAAi31MNdSD7RorMfkhjJYIxmdtKurLmBfkcnVE17x3paPUfxx
X8ld0T0ma8jhz9QrSjIfh9QzsHcBfnf2SGNp5HUvRwXt0NkA9fz6Os9YQ+iwJwHY
IBjsl4yzbEoJEMIs0HX+V3OscSIC3xGZcxzjOZ3S2yz6L5vsj3Ipb5taruwHirP6
qHY+RVPXAgMBAAECggEAb+iLCLQUBTQV2WjW+GEf3JCpk6KPi9uLyRH1loe5HhjB
PxzofkvfvgI5xaUZdo7hMQOJ6Fs5++WfYkawE//WTGWaRuhn07Z7KfLFrTlpfCxk
r8J0iUB5X64hT6FlrlkK8s2NpWEOS6NoOVUTX7YqfLLiWgoNL/jqca2GMdPATa/V
mZj/irYVBmkFbh7gUWWw7cYUwDJsc5jZkEB/wWwOHG8MzyMoOMttuX2Xt+5t36t7
mon5a4u7zM7ctrRbONu3oXxmfqfhgvwgKKrcHOptjT3iF0DOoopGlkimRnVd672h
5CRzaBuV+71CrAYB0vE6WhhUQwnUylYUvFLqzR1EgQKBgQDYDkzPPNG6lJMto/4N
GH3wtbI5Kad83eymQfeUQrtd8UUA7cYNWEXHZVWs+/fTu93DAIjOESoyWqpcyw4P
P31CRT7I3fc6PIhEtnvscpK0ln+cq71QIX8Mcie5W3BuoIcTjvsPY3zM9pSZB9Re
LkO9PY7MMRk9GMcsG+lSXN1clwKBgQDVkqX5M5scWpnO3kj0So6GyZScG2IWQ44C
0guTZh7dlmzhfwBmXh77sXYNFdIu2eGkGsPBRxqQl3QDdG6bSm2YqwF5VlplabnC
q1oxHwt90u0L2441wXLWwquhrxvdlnQrJz0IqD476q6WqBeRxLGpIpkztOSwOK26
1GlkCtRqwQKBgBjKi0W8VNRz9+9kweH+zXSxZKHqha1uSZlKOH5qqdU9ug1BO1iM
qHUYy5vtzaIeDHQzu37puU3N2X6MTjCxuE3CZFHoJlYoW/qGdfHLs8nE+x+fFTn8
nfdvod9C/sOy58z2uxgo8kkSgjqNC3FDHcK5LYmAmMTJ8xC8oykwPrZBAoGAO4nc
VzJ5xVfElRUGxYObZBwCH9rKZ2aBymt/6qGHbUKoK9zZ4a/Pd18rh85Tf9ghvTvw
4orN7w0pvGTTCNug3fSePpNCNA9bR9e5FwSOkY8hojKc3IOHXjN64WINpKJy1Czm
KOmuH8n2ze0iVPK+jGYmy3FcZ3wFgpYAo3EZcoECgYBWlBWUK3CtT12uoRdepNWg
DCPm0k7KDW71NqiXkA+jxGxsCcv4M3CuN2Xs//2dTWqErhWqMq7ASmfxumCmPHWs
dmjya/fGc6G3IrZNj6/fxPrOLShHDBS1HP/9MmVTBd0d39CaSKBaMzvU3DaJu0rq
d0IqLGwMv/t411orp77J1Q==
-----END PRIVATE KEY-----

144
resources/org/wxpay/demo.php

@ -0,0 +1,144 @@
<?php
//微信支付设置
public function wxconf()
{
//=======【基本信息设置】=====================================
//微信公众号身份的唯一标识。审核通过后,在微信发送的邮件中查看
$wxconfig['APPID'] = 'wx1c7946b5734199d0';
//受理商ID,身份标识
$wxconfig['MCHID'] = '1331184301';
//商户支付密钥Key。审核通过后,在微信发送的邮件中查看
$wxconfig['KEY'] = '93aa64d6552bf09401af7e7e6f9b3be7';
//JSAPI接口中获取openid,审核后在公众平台开启开发模式后可查看
$wxconfig['APPSECRET'] = '93aa64d6552bf09401af7e7e6f9b3be7';
//=======【JSAPI路径设置】===================================
//获取access_token过程中的跳转uri,通过跳转将code传入jsapi支付页面
$wxconfig['JS_API_CALL_URL'] = 'http://'.$_SERVER['HTTP_HOST'].U('Wxpay/index');
//=======【证书路径设置】=====================================
//证书路径,注意应该填写绝对路径
$wxconfig['SSLCERT_PATH'] = './cert/apiclient_cert.pem';
$wxconfig['SSLKEY_PATH'] = './cert/apiclient_key.pem';
//=======【异步通知url设置】===================================
//异步通知url,商户根据实际开发过程设定
$wxconfig['NOTIFY_URL'] = 'http://'.$_SERVER['HTTP_HOST'].U('Wxpay/notify_url');
//=======【curl超时设置】===================================
//本例程通过curl使用HTTP POST方法,此处可修改其超时时间,默认为30秒
$wxconfig['CURL_TIMEOUT'] = 30;
return $wxconfig;
}
//PHP服务端SDK生成APP支付订单信息示例
public function wxt()
{
$body = '商品购买';//订单详情
$out_trade_no = '2017787878';//订单号
$total_fee = floatval(0.01*100);//价格3880.00
$wxconfig=$this->wxconf();
//=========步骤1:网页授权获取用户openid============
//使用jsapi接口
require_once './WxPayPubHelper.class.php';
//import("@.ORG.Wxpay.WxPayPubHelper");
//Vendor('Wxpay.WxPayPubHelper');// 导入微信类
$jsApi = new JsApi_pub($wxconfig);
//通过code获得openid
if (!isset($_GET['code']))
{
//触发微信返回code码
//$url = $jsApi->createOauthUrlForCode($this->wxconfig['JS_API_CALL_URL']);
$reurl='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$url = $jsApi->createOauthUrlForCode(urlencode($reurl));
Header("Location: $url"); exit;
}
else
{
//获取code码,以获取openid
$code = $_GET['code'];
$jsApi->setCode($code);
$openid = $jsApi->getOpenId();
}
//=========步骤2:使用统一支付接口,获取prepay_id============
//使用统一支付接口
$unifiedOrder = new UnifiedOrder_pub($wxconfig);
$notify_url = $wxconfig['NOTIFY_URL'];//通知地址
//设置统一支付接口参数
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//spbill_create_ip已填,商户无需重复填写
//sign已填,商户无需重复填写
$unifiedOrder->setParameter("openid","$openid");//微信用户
$unifiedOrder->setParameter("body","$body");//商品描述
$unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号
$unifiedOrder->setParameter("total_fee","$total_fee");//总金额
$unifiedOrder->setParameter("notify_url","$notify_url");//通知地址
$unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
//$unifiedOrder->setParameter("attach","test"); //附加数据,选填,在查询API和支付通知中原样返回,可作为自定义参数使用
$prepay_id = $unifiedOrder->getPrepayId();
//=========步骤3:使用jsapi调起支付============
$jsApi->setPrepayId($prepay_id);
$jsApiParameters = $jsApi->getParameters();
$this->assign('jsApiParameters',$jsApiParameters);
$returnUrl='http://'.$_SERVER['HTTP_HOST'].U('User/index');
$this->assign('returnUrl',$returnUrl);
$this->display();
}
//PHP服务端验证异步通知信息参数示例
public function AlipayTradeAppPayNotify()
{
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
$post_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
$array_data['out_trade_no'] = substr($post_data['out_trade_no'],0,-5);
$array_data['total_fee'] = $post_data['total_fee'];
$array_data['trade_state'] = $post_data['result_code'];
$array_data['transaction_id'] = $post_data['transaction_id'];
$get_arr = explode('&',$post_data['attach']);
foreach($get_arr as $value){
$tmp_arr = explode('=',$value);
$array_data[$tmp_arr[0]] = $tmp_arr[1];
}
$wxorder=serialize($array_data);//保存post数据
$out_trade_no = $array_data['out_trade_no'];
if($array_data['trade_state']=='SUCCESS' )
{
echo "SUCCESS";
}
else
{
echo "FAILE";
}
}
/**
* 微信红包
* @param string $openid 用户openid
*/
public function wxhbpay($re_openid,$money,$wishing='恭喜发财,大吉大利!',$act_name='赠红包活动',$remark='赶快领取您的红包!')
{
import("@.ORG.Wxpay.WxPayPubHelper");
$wxHongBaoHelper = new Sendredpack($this->wxconfig);
$wxHongBaoHelper->setParameter("mch_billno", date('YmdHis').rand(1000, 9999));//订单号
$wxHongBaoHelper->setParameter("send_name", '红包');//红包发送者名称
$wxHongBaoHelper->setParameter("re_openid", $re_openid);//接受openid
$wxHongBaoHelper->setParameter("total_amount", floatval($money*100));//付款金额,单位分
$wxHongBaoHelper->setParameter("total_num", 1);//红包収放总人数
$wxHongBaoHelper->setParameter("wishing", $wishing);//红包祝福
$wxHongBaoHelper->setParameter("client_ip", '127.0.0.1');//调用接口的机器 Ip 地址
$wxHongBaoHelper->setParameter("act_name", $act_name);//活劢名称
$wxHongBaoHelper->setParameter("remark", $remark);//备注信息
$responseXml = $wxHongBaoHelper->postXmlSSL();
//用作结果调试输出
//echo htmlentities($responseXml,ENT_COMPAT,'UTF-8');
$responseObj = simplexml_load_string($responseXml, 'SimpleXMLElement', LIBXML_NOCDATA);
return $responseObj->result_code;
}

50
resources/org/wxpay/wxt.html

@ -0,0 +1,50 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,height=device-height,maximum-scale=1.0,user-scalable=no,inital-scale=1.0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">
<title>微信安全支付</title>
</head>
<script>
//调用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
{$jsApiParameters},
function(res){
WeixinJSBridge.log(res.err_msg);
//alert(res.err_code+res.err_desc+res.err_msg);
if(res.err_msg=='get_brand_wcpay_request:ok'){
alert('支付成功!');
}else{
alert('支付失败!');
}
setTimeout("location.href = '{$returnUrl}'",2000);
}
);
}
function callpay()
{
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}else{
jsApiCall();
}
}
</script>
<body onload="callpay();">
</body>
</html>

0
resources/org/wxpay/说明.txt

15
resources/views/weixin/user/index.blade.php

@ -1,10 +1,11 @@
<!DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"/> <!DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>商城</title><meta name="keywords" content="关键词"><meta name="description" content="描述"><meta content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" name="viewport"> <title>商城</title><meta name="keywords" content="关键词"><meta name="description" content="描述"><meta content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" name="viewport">
<link href="<?php echo env('APP_URL'); ?>/css/weixin/style.css" type="text/css" rel="stylesheet"> <link href="<?php echo env('APP_URL'); ?>/css/weixin/style.css" type="text/css" rel="stylesheet">
<script type="text/javascript" src="<?php echo env('APP_URL'); ?>/js/jquery.min.js"></script></head><body>
<script type="text/javascript" src="<?php echo env('APP_URL'); ?>/js/jquery.min.js"></script>
<script type="text/javascript" src="<?php echo env('APP_URL'); ?>/js/weixin/mobile.js"></script></head><body>
<div class="myhearder"> <div class="myhearder">
<div class="person"> <div class="person">
<!--<a href="">-->
<a href="<?php echo route('weixin_userinfo'); ?>">
<div class="fl personicon"> <div class="fl personicon">
<div class="personicon"> <div class="personicon">
<img src="<?php echo $user_info['head_img']; ?>" onerror="this.src='<?php echo env('APP_URL'); ?>/images/weixin/no_user.jpg'"> <img src="<?php echo $user_info['head_img']; ?>" onerror="this.src='<?php echo env('APP_URL'); ?>/images/weixin/no_user.jpg'">
@ -13,11 +14,11 @@
<div class="fl lors"> <div class="fl lors">
<span><?php if($user_info['user_name']){echo $user_info['user_name'];}else{echo $user_info['mobile'];} ?></span> <span><?php if($user_info['user_name']){echo $user_info['user_name'];}else{echo $user_info['mobile'];} ?></span>
</div> </div>
<!--</a>-->
</a>
</div> </div>
<div class="set"> <div class="set">
<!--设置--> <!--设置-->
<a class="setting" href="/index.php/Mobile/User/userinfo.html"><i></i></a>
<a class="setting" href="<?php echo route('weixin_userinfo'); ?>"><i></i></a>
<!--我的留言--> <!--我的留言-->
<a class="massage" href="/index.php/mobile/User/message_notice.html"><i></i></a> <a class="massage" href="/index.php/mobile/User/message_notice.html"><i></i></a>
</div> </div>
@ -291,11 +292,7 @@
--> -->
</div> </div>
</div> </div>
<div class="setting">
<div class="close">
<a href="/index.php/Mobile/User/logout.html" id="logout">安全退出</a>
</div>
</div>
<div class="setting"><div class="close"><a href="<?php echo route('weixin_user_logout'); ?>" id="logout">安全退出</a></div></div>
</div> </div>
@include('weixin.common.footer') @include('weixin.common.footer')

99
resources/views/weixin/user/login.blade.php

@ -0,0 +1,99 @@
<!DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>登录</title><meta name="keywords" content="关键词"><meta name="description" content="描述"><meta content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" name="viewport">
<link href="<?php echo env('APP_URL'); ?>/css/weixin/style.css" type="text/css" rel="stylesheet">
<script type="text/javascript" src="<?php echo env('APP_URL'); ?>/js/jquery.min.js"></script>
<script type="text/javascript" src="<?php echo env('APP_URL'); ?>/js/weixin/mobile.js"></script>
<link href="<?php echo env('APP_URL'); ?>/css/font-awesome.min.css" type="text/css" rel="stylesheet"></head><body>
<div class="classreturn loginsignup">
<div class="ds-in-bl return"><a href="javascript:history.back(-1);"><img src="<?php echo env('APP_URL'); ?>/images/weixin/return.png" alt="返回"></a></div>
<div class="ds-in-bl tit center"><span>登录</span></div>
<div class="ds-in-bl nav_menu"><a href="javascript:void(0);"><img src="<?php echo env('APP_URL'); ?>/images/weixin/class1.png" alt="菜单"></a></div>
</div>
<div class="flool tpnavf cl">
<div class="nav_list">
<ul>
<a href="index.html"><li><img src="<?php echo env('APP_URL'); ?>/images/weixin/home_icon.png"><p>首页</p></li></a>
<a href="/Weixin/index.php?m=Store&amp;a=index"><li><img src="<?php echo env('APP_URL'); ?>/images/weixin/brand_icon.png"><p>分类</p></li></a>
<a href="/Weixin/index.php?m=Cart&amp;a=index"><li><img src="<?php echo env('APP_URL'); ?>/images/weixin/car_icon.png"><p>购物车</p></li></a>
<a href="/Weixin/index.php?m=User&amp;a=index"><li><img src="<?php echo env('APP_URL'); ?>/images/weixin/center_icon.png"><p>个人中心</p></li></a></ul>
<div class="cl"></div>
</div>
</div>
<style>
.account{text-align:center;margin-top:50px;}
.account .icon{color:#FFCC00;font-size:100px;}
.bottoma{display:block;font-size:18px;padding:10px;border-radius:2px;}
.adr_add{margin:0 10px;}
.adr-form-group{margin-top:10px;}
.adr-form-group input[type=text],.adr-form-group input[type=password]{display:block;width:100%;font-size:16px;padding:12px;color:#777;vertical-align:middle;background-color:#fff;background-image:none;border:1px solid #ddd;border-radius:0;box-sizing:border-box;}
</style>
<div class="floor account">
<div class="icon"><i class="fa fa-user-circle" aria-hidden="true"></i></div>
<br>
<div class="adr_add">
<div class="adr-form-group">
<input type="text" name="username" class="" id="username" placeholder="请输入账号">
</div>
<div class="adr-form-group">
<input type="password" name="password" class="" id="password" placeholder="请输入密码">
</div>
</div>
<a style="margin:10px;background-color:#1aad19;text-align:center;color:white;border:1px solid #179e16;" class="bottoma" href="javascript:submit();">登录</a>
</div>
<script type="text/javascript" src="<?php echo env('APP_URL'); ?>/js/layer/mobile/layer.js"></script>
<script>
function submit()
{
var username = $("#username").val();
var password = $("#password").val();
if(username == '')
{
//提示
layer.open({
content: '账号不能为空'
,skin: 'msg'
,time: 2 //2秒后自动关闭
});
return false;
}
if(password == '')
{
//提示
layer.open({
content: '密码不能为空'
,skin: 'msg'
,time: 2 //2秒后自动关闭
});
return false;
}
$.post(url,{name:name,mobile:mobile,address:address,province:province,city:city,district:district,is_default:is_default},function(res)
{
if(res.code==0)
{
//提示
layer.open({
content: res.msg
,skin: 'msg'
,time: 2 //2秒后自动关闭
});
window.history.back();
}
else
{
}
},'json');
}
</script>
@include('weixin.common.footer')
</body></html>

4
resources/views/weixin/user/userAccount.blade.php

@ -1,9 +1,9 @@
<!DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"/> <!DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>资金管理</title><meta name="keywords" content="关键词"><meta name="description" content="描述"><meta content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" name="viewport"> <title>资金管理</title><meta name="keywords" content="关键词"><meta name="description" content="描述"><meta content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" name="viewport">
<link href="<?php echo env('APP_URL'); ?>/css/weixin/style.css" type="text/css" rel="stylesheet"> <link href="<?php echo env('APP_URL'); ?>/css/weixin/style.css" type="text/css" rel="stylesheet">
<link href="<?php echo env('APP_URL'); ?>/css/font-awesome.min.css" type="text/css" rel="stylesheet">
<script type="text/javascript" src="<?php echo env('APP_URL'); ?>/js/jquery.min.js"></script> <script type="text/javascript" src="<?php echo env('APP_URL'); ?>/js/jquery.min.js"></script>
<script type="text/javascript" src="<?php echo env('APP_URL'); ?>/js/weixin/mobile.js"></script></head><body>
<script type="text/javascript" src="<?php echo env('APP_URL'); ?>/js/weixin/mobile.js"></script>
<link href="<?php echo env('APP_URL'); ?>/css/font-awesome.min.css" type="text/css" rel="stylesheet"></head><body>
<div class="classreturn loginsignup"> <div class="classreturn loginsignup">
<div class="ds-in-bl return"><a href="javascript:history.back(-1);"><img src="<?php echo env('APP_URL'); ?>/images/weixin/return.png" alt="返回"></a></div> <div class="ds-in-bl return"><a href="javascript:history.back(-1);"><img src="<?php echo env('APP_URL'); ?>/images/weixin/return.png" alt="返回"></a></div>
<div class="ds-in-bl tit center"><span>资金管理</span></div> <div class="ds-in-bl tit center"><span>资金管理</span></div>

121
resources/views/weixin/user/userinfo.blade.php

@ -0,0 +1,121 @@
<!DOCTYPE html><html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>编辑资料</title><meta name="keywords" content="关键词"><meta name="description" content="描述"><meta content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" name="viewport">
<link href="<?php echo env('APP_URL'); ?>/css/weixin/style.css" type="text/css" rel="stylesheet">
<script type="text/javascript" src="<?php echo env('APP_URL'); ?>/js/jquery.min.js"></script>
<script type="text/javascript" src="<?php echo env('APP_URL'); ?>/js/weixin/mobile.js"></script>
<link href="<?php echo env('APP_URL'); ?>/css/font-awesome.min.css" type="text/css" rel="stylesheet"></head><body style="background-color:#f1f1f1;">
<div class="classreturn loginsignup">
<div class="ds-in-bl return"><a href="javascript:history.back(-1);"><img src="<?php echo env('APP_URL'); ?>/images/weixin/return.png" alt="返回"></a></div>
<div class="ds-in-bl tit center"><span>编辑资料</span></div>
<div class="ds-in-bl nav_menu"><a href="javascript:void(0);"><img src="<?php echo env('APP_URL'); ?>/images/weixin/class1.png" alt="菜单"></a></div>
</div>
<div class="flool tpnavf cl">
<div class="nav_list">
<ul>
<a href="<?php echo route('weixin'); ?>"><li><img src="<?php echo env('APP_URL'); ?>/images/weixin/home_icon.png"><p>首页</p></li></a>
<a href="/Weixin/index.php?m=Store&amp;a=index"><li><img src="<?php echo env('APP_URL'); ?>/images/weixin/brand_icon.png"><p>分类</p></li></a>
<a href="/Weixin/index.php?m=Cart&amp;a=index"><li><img src="<?php echo env('APP_URL'); ?>/images/weixin/car_icon.png"><p>购物车</p></li></a>
<a href="/Weixin/index.php?m=User&amp;a=index"><li><img src="<?php echo env('APP_URL'); ?>/images/weixin/center_icon.png"><p>个人中心</p></li></a></ul>
<div class="cl"></div>
</div>
</div>
<div class="floor">
<ul class="fui-list mt10">
<li>
<div class="ui-list-thumb">
<!-- <span style="background-image:url(<?php echo env('APP_URL'); ?>/images/weixin/no_user.jpg)"></span> -->
<form id="head_img" action="<?php echo env('APP_API_URL').'/image_upload'; ?>" method="post" enctype="multipart/form-data">
<img id="avator" src="<?php if($user_info['head_img']!=''){echo $user_info['head_img'];}else{echo env('APP_URL').'/images/weixin/no_user.jpg';} ?>">
<input id="fileupload" type="file" name="file" style="display:none;">
<input type="hidden" name="access_token" value="<?php echo $_SESSION['weixin_user_info']['access_token']; ?>">
</form>
</div>
<div class="ui-list-info">
<h4 class="ui-nowrap">头像</h4>
<div class="ui-reddot ui-reddot-static"></div>
</div>
<i id="avatorright" class="fa fa-angle-right" aria-hidden="true"></i>
</li>
<script type="text/javascript" src="<?php echo env('APP_URL'); ?>/js/layer/mobile/layer.js"></script>
<script type="text/javascript" src="<?php echo env('APP_URL'); ?>/js/jquery-form.js"></script>
<script type="text/javascript">
$(function(){
$("#avator,#avatorright").click(function(){
$("#fileupload").trigger("click");
});
$("#fileupload").change(function(){
$("#head_img").ajaxSubmit({
dataType: 'json',
success: function(res) {
var img = res.data;
if(res.code==0)
{
$("#avator").attr("src",img);
$.post('<?php echo env('APP_API_URL').'/user_info_update'; ?>',{access_token:'<?php echo $_SESSION['weixin_user_info']['access_token']; ?>',head_img:img},function(res2)
{
if(res2.code==0)
{
//提示
layer.open({
content: '头像修改成功'
,skin: 'msg'
,time: 2 //2秒后自动关闭
});
}
},'json');
}
},
error:function(res){
//files.html(res.responseText);
}
});
});
});
</script>
<li>
<div class="ui-list-info">
<h4 class="ui-nowrap">用户名</h4>
<div class="ui-txt-info"><?php echo $user_info['user_name']; ?> &nbsp;</div>
</div>
<i class="fa fa-angle-right" aria-hidden="true"></i>
</li>
<li>
<div class="ui-list-info">
<h4 class="ui-nowrap">昵称</h4>
<div class="ui-txt-info"><?php echo $user_info['nickname']; ?> &nbsp;</div>
</div>
<i class="fa fa-angle-right" aria-hidden="true"></i>
</li>
<li>
<div class="ui-list-info">
<h4 class="ui-nowrap">性别</h4>
<div class="ui-txt-info"><?php if($user_info['sex']==0){echo '未知';}elseif($user_info['sex']==1){echo '男';}elseif($user_info['sex']==2){echo '女';} ?> &nbsp;</div>
</div>
<i class="fa fa-angle-right" aria-hidden="true"></i>
</li>
</ul>
<ul class="fui-list mt10">
<li>
<div class="ui-list-info">
<h4 class="ui-nowrap">修改密码</h4>
<div class="ui-txt-info"> &nbsp;</div>
</div>
<i class="fa fa-angle-right" aria-hidden="true"></i>
</li>
<li>
<div class="ui-list-info">
<h4 class="ui-nowrap">支付密码</h4>
<div class="ui-txt-info"> &nbsp;</div>
</div>
<i class="fa fa-angle-right" aria-hidden="true"></i>
</li>
</ul>
<div class="setting"><div class="close"><a href="<?php echo route('weixin_user_logout'); ?>" id="logout">安全退出</a></div></div>
</div>
@include('weixin.common.footer')
</body></html>

19
routes/web.php

@ -64,8 +64,20 @@ Route::group(['prefix' => 'weixin', 'namespace' => 'Weixin'], function () {
Route::get('/goods/{id}', 'GoodsController@goods')->name('weixin_goods_detail'); //商品详情页 Route::get('/goods/{id}', 'GoodsController@goods')->name('weixin_goods_detail'); //商品详情页
Route::get('/goodslist', 'GoodsController@goodslist')->name('weixin_goods_list'); //产品分类页 Route::get('/goodslist', 'GoodsController@goodslist')->name('weixin_goods_list'); //产品分类页
Route::get('/login', 'UserController@login')->name('weixin_login');
Route::get('/logout', 'UserController@logout')->name('weixin_user_logout'); //退出
//页面跳转
Route::get('/jump', 'IndexController@jump')->name('weixin_jump');
Route::get('/test', 'IndexController@test')->name('weixin_test'); //测试
});
//微信路由,需登录,全局
Route::group(['prefix' => 'weixin', 'namespace' => 'Weixin', 'middleware' => ['web','wxlogin']], function () {
//个人中心 //个人中心
Route::get('/user', 'UserController@index')->name('weixin_user'); Route::get('/user', 'UserController@index')->name('weixin_user');
Route::get('/userinfo', 'UserController@userinfo')->name('weixin_userinfo');
Route::get('/user_account', 'UserController@userAccount')->name('weixin_user_account'); Route::get('/user_account', 'UserController@userAccount')->name('weixin_user_account');
Route::get('/user_money_list', 'UserController@userMoneyList')->name('weixin_user_money_list'); Route::get('/user_money_list', 'UserController@userMoneyList')->name('weixin_user_money_list');
Route::get('/user_point_list', 'UserController@userPointList')->name('weixin_user_point_list'); Route::get('/user_point_list', 'UserController@userPointList')->name('weixin_user_point_list');
@ -73,20 +85,15 @@ Route::group(['prefix' => 'weixin', 'namespace' => 'Weixin'], function () {
Route::get('/user_goods_history', 'UserController@userGoodsHistory')->name('weixin_user_goods_history'); Route::get('/user_goods_history', 'UserController@userGoodsHistory')->name('weixin_user_goods_history');
Route::get('/user_goods_history_delete', 'UserController@userGoodsHistoryDelete')->name('weixin_user_goods_history_delete'); Route::get('/user_goods_history_delete', 'UserController@userGoodsHistoryDelete')->name('weixin_user_goods_history_delete');
Route::get('/user_goods_history_clear', 'UserController@userGoodsHistoryClear')->name('weixin_user_goods_history_clear'); Route::get('/user_goods_history_clear', 'UserController@userGoodsHistoryClear')->name('weixin_user_goods_history_clear');
//商品收藏 //商品收藏
Route::get('/collect_goods', 'CollectGoodsController@index')->name('weixin_user_collect_goods'); Route::get('/collect_goods', 'CollectGoodsController@index')->name('weixin_user_collect_goods');
//购物车
Route::get('/cart', 'CartController@index')->name('weixin_cart'); Route::get('/cart', 'CartController@index')->name('weixin_cart');
//收货地址 //收货地址
Route::get('/user_address', 'AddressController@index')->name('weixin_user_address_list'); Route::get('/user_address', 'AddressController@index')->name('weixin_user_address_list');
Route::get('/user_address_add', 'AddressController@userAddressAdd')->name('weixin_user_address_add'); Route::get('/user_address_add', 'AddressController@userAddressAdd')->name('weixin_user_address_add');
Route::get('/user_address_update', 'AddressController@userAddressUpdate')->name('weixin_user_address_update'); Route::get('/user_address_update', 'AddressController@userAddressUpdate')->name('weixin_user_address_update');
//页面跳转
Route::get('/jump', 'IndexController@jump')->name('weixin_jump');
Route::get('/test', 'IndexController@test')->name('weixin_test'); //测试
}); });

Loading…
Cancel
Save