create($data)){if(!sp_check_verify_code()){$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"$key:$value";}}/*支付成功回调函数*/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转为arraypublicfunctionxmlToArray($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',echo$jsApiParameters;,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();}}订单已生成该笔订单支付金额为:echo$pay_price;立即支付取消支付-->.html">查看详情-->5.支付成功跳转到OrderController.class.php,订单支付完成/***支付页面*/publicfunctionpay_ok(){$o_id=I("get.o_id",0,"intval");$info=$this->model->findone(array("a.id"=>$o_id,'a.status'=>array('neq','-1')));if(empty($info)){#获取最新可用的商品编号$goods=D('Goods')->where(array('status'=>'1'))->order('iddesc')->find();$this->error("该订单不存在,请重新正确进入",U('Goods/sale',array('id'=>$goods['id'])));}$this->assign('imgurl',"/wine/img/ok.png");$this->assign('tips',"订购成功");if('4'==$info['pay_id']){//微信支付成功$this->assign($info);$this->display();}else{$this->assign($info);$this->assign('tips',"订购失败");$this->assign('imgurl',"/wine/img/nook.png");$this->display();}}到此,微信支付流程结束。">
首页 电商 正文

如何同时登陆两个微信,我来教你 PHP后台支付的开发:微信支付和支付宝支付

2024-03-21 19:32
admin

首先新建一个文本文档,输入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"$key:$value";

}

}

/*支付成功回调函数*/

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',

echo$jsApiParameters;,

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();

}

}

订单已生成

该笔订单支付金额为:echo$pay_price;

立即支付

5.支付成功跳转到OrderController.class.php,订单支付完成

/**

*支付页面

*/

publicfunctionpay_ok(){

$o_id=I("get.o_id",0,"intval");

$info=$this->model->findone(array("a.id"=>$o_id,'a.status'=>array('neq','-1')));

if(empty($info)){

#获取最新可用的商品编号

$goods=D('Goods')->where(array('status'=>'1'))->order('iddesc')->find();

$this->error("该订单不存在,请重新正确进入",U('Goods/sale',array('id'=>$goods['id'])));

}

$this->assign('imgurl',"/wine/img/ok.png");

$this->assign('tips',"订购成功");

if('4'==$info['pay_id']){

//微信支付成功

$this->assign($info);

$this->display();

}else{

$this->assign($info);

$this->assign('tips',"订购失败");

$this->assign('imgurl',"/wine/img/nook.png");

$this->display();

}

}

到此,微信支付流程结束。

支付宝支付

话不多说,直接上代码!

注:1.支付文件是从支付宝上直接拿过来的2.依旧是TP框架【1】将文件放入第三方类库:

(1)

*类名:AlipayConfig.php

*功能:支付宝配置文件

*修改配置:

//MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm

$alipay_config['key']='';//(**从支付宝中获取**)

//服务器异步通知页面路径需http://格式的完整路径,不能营销http:///shhmt/wxyx/

相关文章