首页 > PHP资讯 > 工具库 > 关于微信支付PHPSDK之微信公众号支付实现代码

关于微信支付PHPSDK之微信公众号支付实现代码

工具库
这篇文章主要介绍了关于微信支付PHP SDK之微信公众号支付实现代码的相关资料,需要的朋友可以参考下

这里假设你已经申请完微信支付

1. 微信后台配置 如图

  • );

是设置接收支付结果通知的Url 这里是默认的demo 链接我们可以设置成我们的:


$input->SetNotify_url(dirname('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']).'/notify.php');

当然你也可以选择直接写死。
其中的函数 unifiedOrder($input) 可以到WxPay.Api.php 中文件跟踪,其实就是调用统一下单接口。

在 WxPay.Api.php 中需要更改的一处代码是:


//异步通知url未设置,则使用配置文件中的url    if(!$inputObj->IsNotify_urlSet()){      $inputObj->SetNotify_url(WxPayConfig::NOTIFY_URL);//异步通知url    }

就是当没设置 notifyUrl 的时候回去配置文件中找,但是配置文件中根本没有设置。

所以你可以选择在 配置文件WxPay.Config.php 中加上这个配置,也可以直接写一个默认的notify链接。

函数 GetJsApiParameters() 是获取jsApi支付的参数给变量 $jsApiParameters 方便在下面的Js中调用

jsapi.php 中js的代码:


function jsApiCall() { WeixinJSBridge.invoke(  'getBrandWCPayRequest',  ,  function(res){  WeixinJSBridge.log(res.err_msg);  alert(res.err_code+res.err_desc+res.err_msg);  } ); } 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(); } }

其中点击立即支付按钮调用的就是 callpay() 函数,他有会调用jsApiCall() 函数打开支付程序。
此后输入密码完成支付。

在完成支付页面点击完成会回到这个支付页面,并弹出 支付成功的提示框

$notify = new PayNotifyCallBack();$notify->Handle(false);

其中大部分逻辑在 Handle 函数中处理 文件 WxPay.Notify.php


final public function Handle($needSign = true) { $msg = "OK"; //当返回false的时候,表示notify中调用NotifyCallBack回调失败获取签名校验失败,此时直接回复失败 $result = WxpayApi::notify(array($this, 'NotifyCallBack'), $msg); if($result == false){  $this->SetReturn_code("FAIL");  $this->SetReturn_msg($msg);  $this->ReplyNotify(false);  return; } else {  //该分支在成功回调到NotifyCallBack方法,处理完成之后流程  $this->SetReturn_code("SUCCESS");  $this->SetReturn_msg("OK"); } $this->ReplyNotify($needSign); }

主要代码:


$result = WxpayApi::notify(array($this, 'NotifyCallBack'), $msg);

跟踪函数 notify 文件WxPay.Api.php


public static function notify($callback, &$msg) { //获取通知的数据 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; //如果返回成功则验证签名 try {  $result = WxPayResults::Init($xml); } catch (WxPayException $e){  $msg = $e->errorMessage();  return false; }  return call_user_func($callback, $result); }

通过 $GLOBALS[‘HTTP_RAW_POST_DATA‘]; 获取同志数据 然后 Init 函数验证签名等。验签成功运行代码


return call_user_func($callback, $result);

即调用了一个回调函数,NotifyCallBack() 函数并传递参数 $result 在NotifyCallBack函数中会调用我们重写的NotifyProcess()函数(此函数在notify.php 中被重写)

NotifyProcess() 判断也没有问题就会 设置返回 success的xml信息


$this->SetReturn_code("SUCCESS");$this->SetReturn_msg("OK");

并最终调用函数 $this->ReplyNotify($needSign); echo success的结果

函数ReplyNotify 需要修改一处代码:


final private function ReplyNotify($needSign = true) { //如果需要签名 if($needSign == true &&   $this->GetReturn_code($return_code) == "SUCCESS") {  $this->SetSign(); } WxpayApi::replyNotify($this->ToXml()); }$this->GetReturn_code($return_code) == "SUCCESS")

改为


$this->GetReturn_code() == "SUCCESS")

即可。

这样整个流程就结束了。上面提到了 传递订单参数


$input->SetAttach("test");

如果我设置 值为 test this is attach (其实只要有空格就会存在bug)
如图 传递的订单信息

可以看到 attach 是 test+this+is+attach 即空格被转化为加号

打印接收到的签名和程序算出来的签名发现 签名不同,即认为接收结果异常。

所以我们要是想使用attach 这个值就不能有空格,要么干脆不使用这个参数

(等待微信修复这个bug, 也可能是我这边有哪个地方不会? - -#)

这样 微信支付的 JsApi支付就大致分析完成了。

以上就是关于微信支付PHP SDK之微信公众号支付实现代码的详细内容,更多请关注php中文网其它相关文章!

工具库

本文由欣才IT学院整理发布,未经许可,禁止转载。
支持34不支持0