直接上代码:
一 微信支付封装到Vendor下
二 微信公众号及对应的微信支付商服号
public static $appid = 'wxdff3ac673973bde2'; //微信对应的appid
public static $mchid = '1483472062'; // 商户号ID 还有一个妥妥惠的商户号,appid跟这个相同,但是mchid跟这个不同
public static $key = '934C868AC83C08913F627202AE540055'; // 微信商户支付平台中的 商户支付密钥
public static $appsecret = '3127d8774a614dd50d27050c78dfdba2'; //公众号的appsecret 不是微信支付商户平台的
三 微信核心类文件 WxPayJsApiPay.php 文件中的某个类修改
//require_once dirname(dirname(__FILE__))."/WxPayApi.php";
require_once "WxPayApi.php";
/**
*
* 通过跳转获取用户的openid,跳转流程如下:
* 1、设置自己需要调回的url及其其他参数,跳转到微信服务器https://open.weixin.qq.com/connect/oauth2/authorize
* 2、微信服务处理完成之后会跳转回用户redirect_uri地址,此时会带上一些参数,如:code
*
* @return 用户的openid
*/
public function GetOpenid()
{
//通过code获得openid
if (!isset($_GET['code'])){
//触发微信返回code码
// $baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING';]);
$baseUrl = urlencode('http://';.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); 后修改的这块,之前的URL链接不对
$url = $this->__CreateOauthUrlForCode($baseUrl);
Header("Location: $url");
exit();
} else {
//获取code码,以获取openid
$code = $_GET['code'];
$openid = $this->getOpenidFromMp($code);
return $openid;
}
}
三 目录结构
四 Controller的代码
public function cart4(){
$save_data['coupon_id'] = I('coupon_id');
$order_id = I('order_id');
$order = M('Order')->where("order_id = $order_id")->find();
M('Order')->where("order_id = $order_id")->save($save_data);
$mods=D('OrderGoods');
$where['order_id']= I('request.order_id');
$subject_name=$mods->where($where)->select();
// 如果已经支付过的订单直接到订单详情页面. 不再进入支付页面
if($order['pay_status'] == 1){
$order_detail_url = U("Mobile/User/order_detail",array('id'=>$order_id));
header("Location: $order_detail_url");
}
$paymentList = M('Plugin')->where("`type`='payment' and status = 1 and code in('weixin','alipay')")->select();
//微信浏览器
if(strstr($_SERVER['HTTP_USER_AGENT'],'MicroMessenger')){
$paymentList = M('Plugin')->where("`type`='payment' and status = 1 and code in('weixin','cod')")->select();
}
$paymentList = convert_arr_key($paymentList, 'code');
foreach($paymentList as $key => $val)
{
$val['config_value'] = unserialize($val['config_value']);
if($val['config_value']['is_bank'] == 2)
{
$bankCodeList[$val['code']] = unserialize($val['bank_code']);
}
}
$bank_img = include 'Application/Home/Conf/bank.php'; // 银行对应图片
$payment = M('Plugin')->where("`type`='payment' and status = 1")->select();
$this->assign('subject_name',$subject_name[0]['goods_name']);
$this->assign('paymentList',$paymentList);
$this->assign('bank_img',$bank_img);
$this->assign('order',$order);
$this->assign('bankCodeList',$bankCodeList);
$this->assign('pay_date',date('Y-m-d', strtotime("+1 day")));
if($this->is_weixin()){
vendor('Weixinpay.WxPayJsApiPay');
//1、获取openid
$tools = new JsApiPay();
// $openId = 'orLeuv4781xUlDJjwACO1vgGjObw';
$openId = $tools->GetOpenid();
$input = new WxPayUnifiedOrder();
$input->SetBody($subject_name[0]['goods_name']);
$input->SetAttach("万惠科技");
$input->SetOut_trade_no($order['order_sn']);
// $input->SetOut_trade_no('1486224422'.date("YmdHis"));
$input->SetTotal_fee($order['order_amount']*100);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("惠生活客户服务");
$input->SetNotify_url("http://www.wanhuikeji.cn/Api/Notify/wxPayNotify";);
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);//$openId
// dump($input);die;
$order = WxPayApi::unifiedOrder($input);
// dump($order);die;
echo '统一下单支付单信息
';
$jsApiParameters = $tools->GetJsApiParameters($order);
$this->assign('jsApiParameters',$jsApiParameters);
}
$this->display();
}
五 html中的代码
<include file="Public/header"/>
"__STATIC__/css/flow.css?version=__STATIC_VERSION__">
"__STATIC__/css/style_jm.css?version=__STATIC_VERSION__">
"__STATIC__/css/manyuan1.css?version=__STATIC_VERSION__">
订单已经提交成功!
- 请您在{$pay_date}前完成支付,否则订单将自动取消!
- 订单号:{$order['order_sn']}
- 支付金额:¥{$order['order_amount']}元
支付方式 link">必选
请选择支付方式
<foreach name="paymentList" item="v" key="k">
name="payment_name" onClick="change_pay(this);">
class="fl shipping_title">
"/plugins/{$v['type']}/{$v['code']}/{$v['icon']}" width="110" height="40" />