首先新建一个文本文档,输入start/d""WeChat.exestart/d""WeChat.exe
然后找到微信安装位置从开始菜单——所有程序,找到微信,右击——打开文件位置,在上方右击复制地址
把复制的地址,这个E:安装软件TencentWeChat粘贴到记事本的start/d""WeChat.exe里面,像这样start/d"E:安装软件TencentWeChat"WeChat.exe
然后保存文本,重命名文档,将文档的后缀名从TXT改为bat,确定
最后双击这个后缀名是bat的文件文件,等待一下就可以出现两个微信登陆界面了
PHP后台支付的开发:微信支付和支付宝支付
关于支付的流程之类的就不做解释,大家可以自行搜索!
微信支付
项目前提:本人用的是tp框架,php语言下载到微信平台提供的微信支付接口文件,放在了tp第三方类库vendor,命名为WxpayAPI,
WxpayAPI/lib/WxPay.Api.php接口访问类;
WxpayAPI/lib/WxPay.Config.php配置账号信息;
WxpayAPI/lib/WxPay.Data.php数据对象基础类;
WxpayAPI/lib/WxPay.Exception.php微信支付API异常类;
WxpayAPI/lib/WxPay.Notify.php回调基础类
WxpayAPI/example/WxPay.JsApiPay.phpJSAPI支付实现类
1.对源码进行了部分修改
(1)WxPay.Api.php里注释掉
//require_once"WxPay.Exception.php";
//require_once"WxPay.Config.php";
//require_once"WxPay.Data.php";
(2)WxPay.Config.php里
需要根据商户信息对AppID,MCHID,KEY,APpsECRET进行配置。
(3)WxPay.Data.php里注释掉
//require_once"WxPay.Config.php";
//require_once"WxPay.Exception.php";
(4)WxPay.JsApiPay.php里注释掉
//require_once"../lib/WxPay.Api.php";
配置好这些,接下来就是我们的重点部分了。
2.在订单控制器GoodsController.class.php有订单函数sure()和回调信息函数Callback_url()
/**
*提交订单函数
*/
publicfunctionsure(){
$o_model=D("Wine/Orders");
if(IS_AJAX){
$data=I("post.");
if($o_model->create($data)){
if(!sp_check_verify_code()){
$this->error("验证码错误!");
}
#生成随机订单号
$order_code='O'.date('YmdHis').$o_model->get_order_code(4);
while($o_model->findone(array("order_code"=>$order_code))){
$order_code='O'.date('YmdHis').$o_model->get_order_code(4);
}
$data['order_code']=$order_code;
$addr[0]=$_POST['prov'];
$addr[1]=$_POST['city'];
$addr[2]=$_POST['dist'];
$addr[3]=$_POST['area'];
$data['area']=serialize($addr);
$data['create_time']=time();
$data['update_time']=time();
if($data['pay_id']==1){
$data['order_status']=11;//已付款
$data['status']='1';
}else{
$data['order_status']=10;//待付款
$data['status']='1';
}
//函数调用返回信息
$this->Callback_url($data);
}else{
$this->error($o_model->getError());
}
}else{
$this->error($o_model->getError());
}
}
/**
*回调信息函数
*@paramtype$data
*/
publicfunctionCallback_url($data){
$o_model=D("Wine/Orders");
$add_id=$o_model->add($data);
if(!$add_id){
$this->error("订单提交失败,请稍后重试!");
}
if('4'==$data['pay_id']){
if('4'==$data['pay_id']){
//微信支付
$msg='正在为您跳转到微信支付页面,请等待……';
$url="/index.php/wine/wxpay/index/?o_id=$add_id";
}
$this->success("订单提交成功!".$msg,$url);
}
3.[重点!!!]WxpayController.class.php微信支付控制器,实现对微信接口的调用
/**
*微信支付接口调用
*/
namespaceWineController;
useCommonControllerHomebaseController;
classWxpayControllerextendsHomebaseController{
publicfunction_initialize(){
parent::_initialize();
Vendor("WxpayAPI/example/log");//订单数据写入日志
//注:引入第三方类库中的微信接口文件,对于文件名含有.的,皆用#代替连接才能引入,后缀名不写。
Vendor("WxpayAPI/example/WxPay#JsApiPay");
Vendor("WxpayAPI/lib/WxPay#Config");
Vendor("WxpayAPI/lib/WxPay#Data");
Vendor("WxpayAPI/lib/WxPay#Exception");
Vendor("WxpayAPI/lib/WxPay#Notify");
Vendor("WxpayAPI/lib/WxPay#Api");
//初始化日志
$logHandler=newCLogFileHandler("/projects/wine.huishuocs.com/data/pay_log/".date('Y-m-d').'.log');
$log=Log::Init($logHandler,15);
$this->model=D("Wine/Orders");
$this->url=MODULE_NAME.'/'.CONTROLLER_NAME.'/index';
}
/**
*显示支付页面
*
*/
publicfunctionindex(){
//判断当前订单是否被支付
$orderid=I("get.o_id",0,"intval");
$orderid||$this->error("非法操作!");
$this->assign('orderid',$orderid);
$info=$this->model->findone(array("a.id"=>$orderid,'a.status'=>array('neq','-1')));
$info||$this->error("暂未查询到该订单!");
//10代表订单待支付的状态
if($info['order_status']!=10){
$this->error("订单已支付!");
}
//①、获取用户openid
$tools=newJsApiPay();
$openId=$tools->GetOpenid();#无法使用
//初始化日志
Log::INFO('订单'.var_export($info,true));
$out_trade_no=WxPayConfig::MCHID.date("YmdHis");
$this->model->where(array("id"=>$orderid))->save(array('out_trade_no'=>$out_trade_no));
//$openId="123";#无法使用
//②、统一下单
$input=newWxPayUnifiedOrder();
$input->SetBody($info['mode_name']);
$input->SetAttach($orderid);
$input->SetOut_trade_no($out_trade_no);
//$input->SetTotal_fee($orderArr['total_price']*100);实际支付价格
$input->SetTotal_fee($info['pay_price']*100);//测试时请将支付价格改为0.01,土豪请避开此注释
$this->assign('pay_price',$info['pay_price']);
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis",time()+600));
//$input->SetGoods_tag("test");#优惠券
$input->SetNotify_url('http://'.$_SERVER['HTTP_HOST']."/index.php/Wine/Wxpay/callback");//回调地址
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order=WxPayApi::unifiedOrder($input);
//echo'
//$this->printf_info($order);//打印参数
$this->assign('o_id',$orderid);
$this->assign('jsApiParameters',$tools->GetJsApiParameters($order));
//获取共享收货地址js函数参数
//$this->assign('editAddress',$tools->GetEditAddressParameters());
$this->display('wxpay');
exit;
}
/**
*打印输出数组信息
*@paramtype$data
*/
publicfunctionprintf_info($data){
foreach($dataas$key=>$value){
echo"
}
}
/*支付成功回调函数*/
publicfunctioncallback(){
/*返回给微信服务器*/
//$mes=array(
//'return_code'=>'SUCCESS',
//'return_msg'=>'OK'
//);
//$this->ajaxReturn($mes,'XML');
$logHandler=newCLogFileHandler("/projects/wine.huishuocs.com/data/pay_log/".date('Y-m-d').'.log');
$log=Log::Init($logHandler,15);
//$streamData=isset($GLOBALS['HTTP_RAW_POST_DATA'])?$GLOBALS['HTTP_RAW_POST_DATA']:'';
$streamData=file_get_contents('php://input');
if($streamData!=''){
$arr=$this->xmlToArray($streamData);
Log::INFO('支付'.var_export($arr,true));
}else{
$ret=false;
}
//回调值
if(!empty($arr)){
#数据
Log::INFO('数据1'.var_export($arr,true));
#修改订单状态
$out_trade_no=$arr['out_trade_no'];
$newArr=array('order_status'=>11,'status'=>1);
$this->model->where(array("out_trade_no"=>$out_trade_no))->save($newArr);
$info=$this->model->findone(array("a.out_trade_no"=>$out_trade_no,'a.status'=>array('neq','-1')));
$sql=$this->model->getLastSql();
Log::INFO('数据2'.$sql);
#添服务器*/
$mes=array(
'return_code'=>'SUCCESS',
'return_msg'=>'OK'
);
$this->ajaxReturn($mes,'XML');
}
//将XML转为array
publicfunctionxmlToArray($xml){
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
$values=json_decode(json_encode(simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA)),true);
return$values;
}
}
?>
4.前端微信支付页面wxpay.html
//调用微信JSapi支付
functionjsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
function(res){
WeixinJSBridge.log(res.err_msg);
if(res.err_msg=="get_brand_wcpay_request:ok"){
//alert(res.err_code+res.err_desc+res.err_msg);
//成功跳转页面
window.location.href='{:U("Orders/pay_ok",array("o_id"=>$o_id))}';
}else{
//统一跳转
}
}
);
}
functioncallpay()
{
if(typeofWeixinJSBridge=="undefined"){
if(document.addEventListener){
document.addEventListener('WeixinJSBridgeReady',jsApiCall,false);
}elseif(document.attachEvent){
document.attachEvent('WeixinJSBridgeReady',jsApiCall);
document.attachEvent('onWeixinJSBridgeReady',jsApiCall);
}
}else{
jsApiCall();
}
}
立即支付