最近项目中有需要用到微信支付功能的,在姜总的指导下也简单的研究了下,在这里记录一下在这个项目中实现微信支付功能的整个过程。当然这里只做了微信支付功能和支付完成修改订单状态的功能,所以说是简单实现。。
微信支付。首先要用到微信公众平台和微信支付平台。我这里大概总结了四个步骤:
一、微信公众平台配置。
1、获取appID和appSecret。
2、设置微信支付商户和微信支付目录。支付目录分测试目录和正式目录,测试目录需要设置测试白名单,记得在正式上线的时候将测试目录取消改成正式目录。
二、微信支付平台配置。
获得微信支付商户号MCHID和商户支付密钥KEY。要注意的是:这里的商户号和微信公众平台设置的商户号是一样的。然后KEY如果不知道的时候需要自己设置。
三、调用支付接口。
1、将第一、二步获取的信息写到相应配置文件。
2、调用微信支付接口。这里我们只用传进来订单号orderid和订单支付总价totalpay就可以。
//①、获取用户openid
$tools = new JsApiPay();
$openId = $tools->GetOpenid(); //微信登陆时会获取到openid
//②、统一下单
$input = new WxPayUnifiedOrder();
$input->SetBody($orderid);
$input->SetAttach("XX微信支付");
$input->SetOut_trade_no($orderid); //这里传的订单ID在整个支付过程都不会变。方便异步处理时修改订单状态。
$input->SetTotal_fee($totalpay*100);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$input->SetNotify_url("http://shopdemo.wiiyun.com/wxpay/notify.php"); //异步处理地址
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order = WxPayApi::unifiedOrder($input);
echo '统一下单支付单信息
';
printf_info($order);
$jsApiParameters = $tools->GetJsApiParameters($order);
四、修改订单状态。
//重写回调处理函数
public function NotifyProcess($data, &$msg)
{
Log::DEBUG("call back:" . json_encode($data));
$notfiyOutput = array();
if(!array_key_exists("transaction_id", $data)){
$msg = "输入参数不正确";
return false;
}
//查询订单,判断订单真实性
if(!$this->Queryorder($data["transaction_id"])){
$msg = "订单查询失败";
return false;
}
$orderInfo = Order::getInfoById2($data["out_trade_no"]); //根据订单号获取订单信息
Order::updateStatus($orderInfo['id'], 2, '付款成功'); //修改订单状态
return true;
}