推荐设备MORE

免费网站建设—【洛阳微信小

免费网站建设—【洛阳微信小

行业知识

php完成手机微信公司转帐作用

日期:2021-02-15
我要分享
 *  * KEY:商家付款密匙,参照银行开户电子邮件设定(务必配备,登陆商家服务平台自主设定)  *  */  const APPID = ;  const MCHID = ;  const KEY = ;  //=======【资格证书相对路径设定】=====================================  /**  * TODO:设定商家资格证书相对路径  * 资格证书相对路径,留意应当填好肯定相对路径,推送大红包和查寻必须,可登陆商家服务平台免费下载  * @var path 跟这一文档同一文件目录下的cert文档夹置放资格证书!!!!  */  const SSLCRET12 = cert/apiclient_cert.p12 ;  const SSLCERT_PATH = cert/apiclient_cert.pem ;  const SSLKEY_PATH = cert/apiclient_key.pem ;  const SSLROOTCA = cert/rootca.pem ;    //=======【资格证书相对路径设定】=====================================  /**  * 获得文档的相对路径,资格证书必须详细相对路径  * @return string  */  public static function getRealPath(){  return __DIR__. / ;  }
 // 公司转帐恳求详细地址  const TRANSFERS_URL = mmpaymkttransfers/promotion/transfers ;    //获得转帐信息内容详细地址  const GETINFO_URL= ;    // 转帐必须的配备 wxappid , mch_id , key  private $_keys;    // 转帐必须的资格证书文档 api_cert , api_key , rootca ,请传到肯定相对路径!!!  private $_cert;    protected $log_file;    public $error;    // 有关配备必需主要参数  protected $_parameters = array();    // 最终一次生产制造的定单号  protected $_lastPartnerTradeNo;    // 纪录最终一次推送恳求的結果目标  protected $_lastResult;    // 最终一次任意数  protected $_lastRandNum;    public function __construct($config)  {  $keys = array(   wxappid ,   mch_id ,   key  );  $files = array(   api_cert ,   api_key ,   rootca  );    foreach ($keys as $key) {  try {  $this- _keys[$key] = $config[$key];  } catch (Exception $e) {  throw new Exception( 主要参数缺少: . $key);  }  }    foreach ($files as $file) {  try {  $cret_file = $config[$file];  if (is_file($cret_file)) {  $this- _cert[$file] = $cret_file;  }  } catch (Exception $e) {  throw new Exception( 资格证书不正确 );  }  }  }    public function transfers($parameters){    $this- log($parameters, SEND_PARAM );    $this- setParameter( mchid , $this- _keys[ mch_id ]);  $this- setParameter( mch_appid , $this- _keys[ wxappid ]);    $must = array(   openid ,   check_name ,   re_user_name ,   amount ,   desc ,   spbill_create_ip ,  );  foreach ($must as $key) {  if (isset($parameters[$key]) $parameters[$key]) {  $this- setParameter($key, $parameters[$key]);  } else  if (! isset($this- _parameters[$key]) || ! $this- _parameters[$key]) {  $this- error = 主要参数缺损: . $key;  return false;  }  }  if (! isset($parameters[ partner_trade_no ])) {  $parameters[ partner_trade_no ] = $this- getPartnerTradeNo();  }    $this- setParameter( partner_trade_no , $parameters[ partner_trade_no ]);    $this- setParameter( nonce_str , $this- getRand(30, 3));    $postXml = $this- _createXml();    if (! $postXml) {  return false;  }  $this- log($postXml, SEND_XML );    $result = $this- curl_post_ssl(self::TRANSFERS_URL, $postXml);    $this- log($result, RESULT_XML );    if (! $result) {  return false;  }  $resultObj = simplexml_load_string($result, SimpleXMLElement , LIBXML_NOCDATA);    $this- _lastResult = $resultObj;    if ($resultObj- return_code == SUCCESS ) { // 取得成功标志    if ($resultObj- result_code == SUCCESS ) {    return $resultObj- send_listid;  }    if ($resultObj- return_msg) {  $this- error = (string) $resultObj- return_msg;  return false;  }    $this- error = (string) $resultObj- err_code_des;  return false;  }    if ($resultObj- return_code != FAIL ) {  $this- error = 回到信息内容文件格式出现异常 ;  return false;  }    $this- error = (string) $resultObj- return_msg;  return false;  }    /**  * 获得转帐信息内容  * @param unknown $partner_trade_no  * @return boolean|SimpleXMLElement  */  public function getInfo($partner_trade_no){  $param = array(   nonce_str = $this- getRand(30, 3),   partner_trade_no = $partner_trade_no ,   mch_id = $this- _keys[ mch_id ],   appid   = $this- _keys[ wxappid ],  );    ksort($param);  $unSignParaString = $this- _formatQueryParaMap($param, false);  $param[ sign ] = $this- _sign($unSignParaString, $this- _keys[ key ]);    $xml = $this- arrayToXml($param);    $this- log($xml, GETINFO_XML );    $result = $this- curl_post_ssl(self::GETINFO_URL, $xml);    if(!$result){  return false ;  }    $this- log($result, RESULT_XML );    $resultObj = simplexml_load_string($result, SimpleXMLElement , LIBXML_NOCDATA);  $this- _lastResult = $resultObj ;  if($resultObj- return_code == SUCCESS ){//取得成功标志    if($resultObj- result_code == SUCCESS ){  return $resultObj ;  }    if($resultObj- return_msg){  $this- error = $resultObj- return_msg ;  return false ;  }    $this- error = $resultObj- err_code_des ;  return false ;  }    if($resultObj- return_code != FAIL ){  $this- error = 回到信息内容文件格式出现异常 ;  return false ;  }    $this- error = $resultObj- return_msg ;  return false ;  }  /**  * 设定需要要的主要参数  * @param $parameter 键值数字能量数组/键  * @param $value 值  * @return WxBonusApi  */  public function setParameter($parameter, $value = null)  {  if (! is_array($parameter)) {  return $this- setParameter(array(  $parameter = $value  ));  }    foreach ($parameter as $key = $value) {  $key = trim($key);  $value = trim($value);  $this- _parameters[$key] = $value;  }  return $this;  }    /**  * 获得主要参数值  * @param $parameter 键名  * @return multitype:  */  public function getParameter($parameter)  {  return $this- _parameters[$parameter];  }    /**  * 获得任意数  * @param number $len 任意数的十位数  * @param number $type 赋值范畴 1表明数据 2小书写母 4英文大写英文字母  * @return string  */  public function getRand($len = 30, $type = 0)  {  $str = ;  $max = - 1;    if (! $type) {  $type = 3;  }    if ($type 1) {  $str .= ;  $max += 10;  }    if ($type 2) {  $str .= abcdefghijklmnopqrstuvwxyz ;  $max += 26;  }    if ($type 4) {  $str .= ABCDEFGHIJKLMNOPQRSTUVWXYZ ;  $max += 26;  }    $rand = ;  for ($i = 0; $i $len; $i ++) {  $rand .= $str[rand(0, $max)];  }    return $rand;  }    /**  * 转化成商家的定单号  * @return string  */  public function getPartnerTradeNo()  {  $this- _lastPartnerTradeNo = $this- _parameters[ mch_id ] . date( YmdHis ) . $this- getRand(4, 1); // $this- getRandNum();  return $this- _lastPartnerTradeNo;  }      /**  * 获得最终一次建立转化成的定单号  * @return string  */  public function getLastPartnerTradeNo()  {  return $this- _lastPartnerTradeNo;  }        /**  * 建立XML的方式  * @param number $retcode  * @param string $reterrmsg  * @return boolean|string  */  private function _createXml()  {  try {  $sign = $this- _getSign();  if (! $sign) {  return false;  }  $this- setParameter( sign , $sign);    return $this- arrayToXml($this- _parameters);  } catch (Exception $e) {  $this- error = $e- getMessage();  return false;  }  }      /**  * 主要参数变换成XML  * @param array $arr 主要参数数字能量数组  * @return string  */  public function arrayToXml($arr)  {  $xml = ;  foreach ($arr as $key = $val) {  if (is_numeric($val)) {  $xml .= . $key . . $val . . $key . ;  } else {  $xml .= . $key . . $val . ]] . $key . ;  }  }  $xml .= ;  return $xml;  }    /**  * 得到签字結果  * @return boolean|Ambigous  */  protected function _getSign()  {  try {    if ($this- _checkSign() == false) { // 查验转化成签字主要参数  $this- error = 转化成签字主要参数缺少! ;  $this- log(json_encode($this- _parameters, JSON_UNESCAPED_UNICODE), ERROR_Sign_XML );  return false;  }    ksort($this- _parameters);  $unSignParaString = $this- _formatQueryParaMap($this- _parameters, false);    return $this- _sign($unSignParaString, $this- _keys[ key ]);  } catch (Exception $e) {  $this- error = $e- getMessage();  return false;  }  }    /**  * 查验签字需要主要参数是不是齐备  * @return boolean  */  private function _checkSign()  {  // return true;   if ($this- _parameters[ mch_appid ] == null ||  $this- _parameters[ mchid ] == null ||  //$this- _parameters[ ] == null || 机器设备id  $this- _parameters[ nonce_str ] == null ||  $this- _parameters[ partner_trade_no ] == null ||  $this- _parameters[ openid ] == null ||  $this- _parameters[ check_name ] == null ||  $this- _parameters[ re_user_name ] == null ||  $this- _parameters[ desc ] == null ||  $this- _parameters[ spbill_create_ip ] == null) {  return false;  }  return true;  }    /**  *  * @param $paraMap  * @param $urlencode  * @return string  */  private function _formatQueryParaMap($paraMap,$urlencode)  {  $buff = ;  ksort($paraMap);  foreach ($paraMap as $k = $v) {  if (null != $v null != $v sign != $k) {  if ($urlencode) {  $v = urlencode($v);  }  $buff .= $k . = . $v . ;  }  }  $reqPar;  if (strlen($buff) 0) {  $reqPar = substr($buff, 0, strlen($buff) - 1);  }  return $reqPar;  }      /**  * 签字  * @param $content 签字的标识符串  * @param $key 密匙  * @throws Exception  * @return string|boolean  */  private function _sign($content, $key)  {  try {  if (null == $key) {  $this- error = 签字key不可以为空! ;  return false;  }  if (null == $content) {  $this- error = 签字內容不可以为空 ;  return false;  }  $signStr = $content . key= . $key;    return strtoupper(md5($signStr));    } catch (Exception $e) {  $this- error = $e- getMessage();  return false;  }  }    /**  * cURL爬取  *  * @param $url 连接详细地址  * @param $vars 主要参数  * @param  *  $second  * @param  *  $aHeader  * @return mixed|boolean  */  function curl_post_ssl($url, $data, $second = 30, $aHeader = array())  {  $ch = curl_init();  // 请求超时時间  curl_setopt($ch, CURLOPT_TIMEOUT, $second);  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // 这儿设定代理商,假如有得话  curl_setopt($ch, CURLOPT_URL, $url);  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // cert 与 key 各自归属于2个.pem文档  curl_setopt($ch, CURLOPT_SSLCERT, $this- _cert[ api_cert ]);  curl_setopt($ch, CURLOPT_SSLKEY, $this- _cert[ api_key ]);  curl_setopt($ch, CURLOPT_CAINFO, $this- _cert[ rootca ]);  if (count($aHeader) = 1) {  curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);  }  curl_setopt($ch, CURLOPT_POST, 1);  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  $data = curl_exec($ch);  if ($data) {  curl_close($ch);  return $data;  } else {  $this- log(json_encode($this- _cert));  $this- error = aa: .curl_errno($ch);  curl_close($ch);  return false;  }  }    /**  * 获得网络服务器ip  *  * @return string  */  public function getServerIp()  {  $server_ip = 127.0.0.1 ;  if (isset($_SERVER)) {  if (isset($_SERVER[ SERVER_ADDR ]) $_SERVER[ SERVER_ADDR ]) {  $server_ip = $_SERVER[ SERVER_ADDR ];  } elseif (isset($_SERVER[ LOCAL_ADDR ]) $_SERVER[ LOCAL_ADDR ]) {  $server_ip = $_SERVER[ LOCAL_ADDR ];  }  } else {  $server_ip = getenv( SERVER_ADDR );  }  return $server_ip;  }    /**  * 设定系统日志文件目录文档  *  * @param unknown $file  */  public function setLogFile($file)  {  $this- log_file = $file;  }    /**  * 写系统日志  *  * @param $msg 载入的信息内容  * @param $type 系统日志种类做为查寻标识  */  public function log($msg, $type)  {  if ($this- log_file) {  $log = str_replace(array(   \r\n ,   \r ,   \n  ), array(   ,   ,    ), $msg);  error_log($type . . date( Y-m-d H:i:s ) . . json_encode($log,JSON_UNESCAPED_UNICODE) . \r\n , 3, $this- log_file);  }  }  
 $path = WxTransfersConfig::getRealPath(); // 资格证书文档相对路径  $config[ wxappid ] = WxTransfersConfig::APPID;  $config[ mch_id ] = WxTransfersConfig::MCHID;  $config[ key ] = WxTransfersConfig::KEY;  $config[ PARTNERKEY ] = WxTransfersConfig::KEY;  $config[ api_cert ] = $path . WxTransfersConfig::SSLCERT_PATH;  $config[ api_key ] = $path . WxTransfersConfig::SSLKEY_PATH;  $config[ rootca ] = $path . WxTransfersConfig::SSLROOTCA;    $wxtran=new WxTransfers($config);    $wxtran- setLogFile( D:\\transfers.log );//系统日志详细地址    //转帐  $data=array(   openid = ,//openid   check_name = NO_CHECK ,//是不是认证真正名字主要参数   re_user_name = 11 ,//名字   amount = 100,//最少一元 也便是100   desc = 公司转帐检测 ,//叙述   spbill_create_ip = $wxtran- getServerIp(),//网络服务器IP详细地址  );  var_dump(json_encode($wxtran- transfers($data),JSON_UNESCAPED_UNICODE));  var_dump($wxtran- error);    //获得转帐信息内容  var_dump($wxtran- getInfo( ));  var_dump($wxtran- error);  }