应用场景:有这样一个返现系统,当前端客户发起提现时,后台必须通过返现订单审核后方可现金返还可以返回到客户的帐户中。看看下面的截图。这里的业务场景是要经过两轮审核:销售审核和财务审核通过后,后台会付一笔钱给客户。当然,财务审计也会有很多情况。通关后直接付款的情况很多。具体可以查看微信支付的文档进行更改。看你具体实现微信支付配置的代码1.数据表大致如下`varchar(10)NOTNULLCOMMENT'微信公众平台名称',`token`varchar(100)NOTNULL,`appid`char(18)NOTNULL,`appsecret`char(32)NOTNULL,`access_token`varchar(300)NOTNULL,`api_ticket`varchar(300)DEFAULTNULLCOMMENT'微信卡包api_ticket',`api_ticket_expired_at`datetimeDEFAULTNULLCOMMENT'微信卡包api_ticket过期时间',`mchid`varchar(20)DEFAULTNULLCOMMENT'商户号',`mchkey`varchar(50)DEFAULTNULLCOMMENT'支付密钥',`expired_at`timestampNULLDEFAULTNULLCOMMENT'access_token过期时间,会自动更新',`updated_at`timestampNULLDEFAULTNULLCOMMENT'记录更新时间',`created_at`timestampNULLDEFAULTNULLCOMMENT'创建于',`sort_order`smallint(5)NOTNULLDEFAULT'0'COMMENT'sorted',`points_url`varchar(100)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=MyISAMAUTO_INCREMENT=11默认字符集=utf8CHECKSUM=1DELAY_KEY_WRITE=1ROW_FORMAT=DYNAMICCOMMENT='微信配置表';2.config配置方法/***获取微信支付配置*这里我把配置信息存储在数据表中方便调用*$param是从controller传过来的value:weixin_config_id,notify_url*@returnarray*/publicfunctiongetWechatConfig($param){$weixin=WeixinConfigBaseModel::find($param['weixin_config_id']);}if(empty($weixin)){thrownewException('微信配置ID错误');}return['wechat'=>[$app_id=>$weixin->appid,'mch_id'=>$weixin->mchid,'notify_url'=>empty($param['notify_url'])?'':$param['notify_url'],//回调url'key'=>$weixin->mchkey,'cert_client'=>resource_path().'/wechat/'.$weixin->id.'/apiclient_cert.pem',//证书和密钥'cert_key'=>resource_path().'/wechat/'.$weixin->id.'/apiclient_key.pem',]];}企业支付给个人更改核心代码/***功能:企业支付到个人找零*作者:cyw0413*@param$openid*@param$trade_no*@param$money*@param$desc*@returnarray*/publicfunctionweixinPay($input){$config=$this->getWechatConfig($input);$params["mch_appid"]=$config['wechat']['app_id'];$params["mchid"]=$config['wechat']['mch_id'];$params["nonce_str"]=date("YmdHis").mt_rand(100,999);$params["partner_trade_no"]=$input['trade_no'];//商家订购单号$params["amount"]=$input['amount'];$params["desc"]=$input['desc'];$params["openid"]=$input['openid'];$params["check_name"]='NO_CHECK';$params['spbill_create_ip']=$_SERVER['SERVER_ADDR'];//生成签名$str='amount='.$params["amount"].'&check_name='.$params["check_name"].'&desc='.$params["desc"].'&mch_appid='.$params["mch_appid"].'&mchid='.$params["mchid"].'&nonce_str='.$params["nonce_str"].'&openid='.$params["openid"].'&partner_trade_no='.$params["partner_trade_no"].'&spbill_create_ip='.$params['spbill_create_ip'].'&key='.$config['wechat']['key'];//md5加密转换成大写$sign=strtoupper(md5($str));//生成签名$params['sign']=$sign;//构造XML数据$xmldata=$this->array_to_xml($params);//数组转XML$url='https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';//发送post请求$res=$this->curl_post_ssl($url,$xmldata,$input['weixin_config_id']);//curl请求if(!$res){thrownew\Exception("服务器连接失败");}//支付结果分析$content=$this->xml_to_array($res);//xml到数组return$content;}/***curlrequest**/publicfunctioncurl_post_ssl($url,$xmldata,$weixin_config_id,$second=30,$aHeader=[]){$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,f);//默认格式为PEM,可以注释curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');//绝对地址可以用dirname(__DIR__)打印,如果不是绝对地址,会报58错误curl_setopt($ch,CURLOPT_SSLCERT,resource_path().'/wechat/'.$weixin_config_id.'/apiclient_cert.pem');curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');curl_setopt($ch,CURLOPT_SSLKEY,resource_path().'/wechat/'.$weixin_config_id.'/apiclient_key.pem');如果(count($aHeader)>=1){curl_setopt($ch,CURLOPT_HTTPHEADER,$aHeader);}curl_setopt($ch,CURLOPT_POST,1);curl_setopt($ch,CURLOPT_POSTFIELDS,$xmldata);$data=curl_exec($ch);如果($数据){curl_close($ch);返回$数据;}else{$error=curl_errno($ch);echo"调用失败,errorCode:$error\n";//死();curl_close($ch);返回假;}}/***array转xml*用于生成签名*/publicfunctionarray_to_xml($arr){$str='
