打印/下载
函数
案例

扩展

dnf install php74-php-xml

getAccessToken() : 获取Token

static public function getAccessToken(): string

getOpenid() : 获取OpenID

static public function getOpenid(
  string $code='',  //用户授权码
): string

getSign() : 获取签名

static public function getSign(
  array $data=[],  //用户授权码
): string

msgValid() : 消息-验证

static public function msgValid(): void

msgSend() : 消息-发送

static public function msgSend(
  string $token='',  //Token
  array $data='',  //数据
): void

getUnifiedOrder() : 统一下单

static public function getUnifiedOrder(
  array $data='',  //数据
): void

getWappPay() : 支付参数-小程序

static public function getWappPay(
  string $prepay_id='',  //微信订单号
): array

getAppPay() : 支付参数-APP

static public function getAppPay(
  string $prepay_id='',  //微信订单号
): array

getNotify() : 回调数据

static public function getNotify(): array

xml2array() : XML转数组

static public function xml2array(
  string $xml='',  //XML
): array
<?php
namespace app\modules\api\controller;

use app\controller\Base;
use app\library\Wechat;

class DemoController extends Base{

  /* 小程序-支付 */
  function wechatPayAction(){
    $type = $this->request->get('type','string');
    $data = [];
    // 支付类型
    if($type=='JSAPI'){
      $data['trade_type'] = 'JSAPI';
      // OpenID
      $code = $this->request->get('code','string');
      $data['openid'] = Wechat::getOpenid($code);
    }else if($type=='MWEB'){
      $data['trade_type'] = 'MWEB';
    }elseif($type == 'APP'){
      $data['trade_type'] = 'APP';
    }else{
      return self::getJSON(['code'=>4000,'msg'=>'支付类型错误']);
    }
    // 订单信息
    $data['out_trade_no'] = date("YmdHis").mt_rand(1000, 9999);
    $data['total_fee'] = 0.01*100;
    $data['body'] = '商品简单描述';
    $data['attach'] = '自定义内容';
    $data['notify_url'] = 'https://api.ynjici.com/api/index/wechatNotify';
    // 统一下单
    $prepay_id = Wechat::getUnifiedOrder($data);
    // 支付参数
    if(is_string($prepay_id)){
      $res = Wechat::getWappPay($prepay_id);
      return self::getJSON(['code'=>0,'pay'=>$res]);
    }else{
      return self::getJSON(['code'=>50000,'info'=>$prepay_id]);
    }
  }

  /* 异步回调 */
  function wechatNotifyAction(){
    $res = Wechat::getNotify();
    if($res){
      file_put_contents('tmp.txt',json_encode($res));
      // 订单信息
      $order_sn = $res->out_trade_no;
      $attach = $res->attach;
      // 成功
      echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
    }else{
      echo '';
    }
  }

  /* 小程序-消息推送验证 */
  function wechatValidAction(){
    $res = Wechat::msgValid();
    if($res) echo $res;
    else self::wechatMsg();
  }
  /* 接收消息 */
  private function wechatMsg(){
    // 数据
    $postStr = file_get_contents('php://input');
    file_put_contents('tmp.txt','接收');
    if(empty($postStr) || !is_string($postStr)){ echo ''; exit;}
    $postArr = json_decode($postStr);
    $openid = isset($postArr->FromUserName)?$postArr->FromUserName:'';
    // 文本消息
    if(!empty($postArr->MsgType) && $postArr->MsgType=='text'){
      // 消息处理
      self::wechatClass($openid,trim($postArr->Content));
    // 图文消息
    }elseif(!empty($postArr->MsgType) && $postArr->MsgType=='image'){
      echo 'success';
    // 进入客服
    }elseif($postArr->MsgType=='event' && $postArr->Event=='user_enter_tempsession'){
      self::wechatSend([
        'touser'=> $openid,
        'msgtype'=> 'text',
        'text'=> [
          'content'=>"请回复如下数字:\n1.日程查询\n2.费用查询"
        ],
      ]);
    }
  }
  /* 消息分类 */
  private function wechatClass($openid,$msg){
    $content = '';
    switch($msg){
      case '1':
        $content = '日程查询结果';
        break;
      case '2':
        $content = '费用查询结果';
        break;
      default :
        echo 'success'; exit;
    }
    // 发送
    self::wechatSend(['touser'=> $openid,'msgtype'=> 'text','text'=> ['content'=>$content]]);
  }
  /* 发送消息 */
  private function wechatSend($data){
    // 获取Token
    $token = $this->redis->get('wechat_token');
    if(!$token){
      $token = Wechat::getAccessToken();
      $this->redis->setex('wechat_token',1.9*3600,$token);
    }
    // 发送
    Wechat::msgSend($token, $data);
  }

}
{{copy}}