admin 管理员组文章数量: 1184232
支付宝生活号开发(php)
支付宝生活号开发(php)
鉴于支付宝生活号开发的Demo看起来比较乱,自己最近做了这个东西,所以就整理了一下,希望对你有点帮助!
-
激活开发者模式
class AlipayController extends Controller{private $aop;protected function _initialize(){require './Application/Pay/Conf/aliConfig.php';vendor("Alipay.aop.AopClient"); //引入sdk$aop = new \AopClient();$aop->gatewayUrl = $config['gatewayUrl'];$aop->appId = $config['app_id'];$aop->rsaPrivateKey = $config['merchant_private_key'];$aop->alipayrsaPublicKey = $config['alipay_public_key'];$aop->apiVersion = '1.0';$aop->postCharset=$config['charset'];$aop->format='json';$aop->signType=$config['sign_type'];$this->aop = $aop;}//支付宝生活号激活开发者网关public function gateway(){$data = $_POST;$sign_verify = $this->aop->rsaCheckV2($data, '', $data['sign_type']);if (!$sign_verify) {// 如果验证网关时,请求参数签名失败,则按照标准格式返回,方便在服务窗后台查看。if ($data["service"] == "alipay.service.check") {$this->verifygw(false,$data["biz_content"]);} exit ();}// 验证网关请求if ($data["service"] == "alipay.service.check") {$this->verifygw(true, $data["biz_content"]);} else if ($data["service"] == "alipay.mobile.public.message.notify") {// 处理收到的消息$this->Message($data['biz_content']);}}}verifygwpublic function verifygw($is_sign_success,$biz_content=null) {$disableLibxmlEntityLoader = libxml_disable_entity_loader(true);$xml = simplexml_load_string ( $biz_content );libxml_disable_entity_loader($disableLibxmlEntityLoader);// print_r($xml);$EventType = ( string ) $xml->EventType;// echo $EventType;if ($EventType == "verifygw") {if ($is_sign_success) {$response_xml = "<success>true</success><biz_content>" . $this->aop->rsaPrivateKey . "</biz_content>";} else { // echo $response_xml;$response_xml = "<success>false</success><error_code>VERIFY_FAILED</error_code><biz_content>" . $this->aop->merchant_private_key . "</biz_content>";}$mysign=$this->aop->alonersaSign($response_xml,$this->aop->rsaPrivateKey,$this->aop->signType);$return_xml = "<?xml version=\"1.0\" encoding=\"".$this->aop->postCharset."\"?><alipay><response>".$response_xml."</response><sign>".$mysign."</sign><sign_type>".$this->aop->signType."</sign_type></alipay>";echo $return_xml;exit ();} }aliConfig.php的内容$config = array ( //应用ID,您的APPID。'app_id' => "应用的appid",//商户私钥,您的原始格式RSA私钥'merchant_private_key' => "应用的私钥",//编码格式'charset' => "UTF-8",//签名方式'sign_type'=>"RSA2",//支付宝网关'gatewayUrl' => ".do",//支付宝公钥'alipay_public_key' => "应用的支付宝公钥");
应用网关的地址需要写成 域名/模块/Alipay/gateway
-
开发者模式激活后就可以开始开发了
重点在这个Message里面//生活号事件类型判断 public function Message($biz_content) {$date = date("Y-m-d");Log::write($biz_content, 'info', '', 'Logs/Pay/Alipay/ShengHuoHao/' . $date . '.txt');header("Content-Type: text/xml;charset=utf-8");$UserInfo = $this->getNode($biz_content, "UserInfo");$FromUserId = $this->getNode($biz_content, "FromAlipayUserId");$AppId = $this->getNode($biz_content, "AppId");$CreateTime = $this->getNode($biz_content, "CreateTime");$MsgType = $this->getNode($biz_content, "MsgType");$EventType = $this->getNode($biz_content, "EventType");$AgreementId = $this->getNode($biz_content, "AgreementId");$ActionParam = $this->getNode($biz_content, "ActionParam");$AccountNo = $this->getNode($biz_content, "AccountNo");if ($EventType == 'follow') {//关注事件}else if(($EventType == 'unfollow')){//取消关注事件}echo self::mkAckMsg ( $FromUserId );exit (); }其他事件判断请参考支付宝官方文档
getNode
/*** 直接获取xml中某个结点的内容**/public function getNode($biz_content, $node) {$xml = "<?xml version=\"1.0\" encoding=\"GBK\"?>" . $biz_content;$dom = new \DOMDocument ( "1.0", "GBK" );$dom->loadXML ( $xml );$event_type = $dom->getElementsByTagName ( $node );return $event_type->item ( 0 )->nodeValue;}mkAckMsg
public function mkAckMsg($toUserId) {$response_xml = "<XML><ToUserId><![CDATA[" . $toUserId . "]]></ToUserId><AppId><![CDATA[" . $this->aop->appId . "]]></AppId><CreateTime>" . time () . "</CreateTime><MsgType><![CDATA[ack]]></MsgType></XML>";$mysign=$this->aop->alonersaSign($response_xml,$this->aop->merchant_private_key,$this->aop->signType);$return_xml = "<?xml version=\"1.0\" encoding=\"".$this->aop->postCharset."\"?><alipay><response>".$response_xml."</response><sign>".$mysign."</sign><sign_type>".$this->aop->signType."</sign_type></alipay>";return $return_xml;}
就写到这里吧!愿君能有几多愁,恰是一群太监上青楼!
本文标签: 支付宝生活号开发(php)
版权声明:本文标题:支付宝生活号开发(php) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.roclinux.cn/b/1693765728a241558.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论