tp5微信公众号获取用户openid_tp5开发公众号微信支付

接收前端传过来的openid和支付金额moneys和用户昵称nickName,提交给sendMoney方法

public function index(Request $request)

{

$openid = $request->param('openid');//获取openId

$money = $request->param('money');//支付金额

return $this->sendMoney($moneys,$openid,'支付简介',$nickName);

}

}

2.详解sendMoney方法

①将商户账户appid、商户号、随机字符串(见createNocestr方法)、商户订单号、用户的oepnid、支付金额、充值描述信息、ip地址、trade_type(这里用的是JSAPI)、回调地址拼成数组array

②过滤函数、拼接字符串

③将商户秘钥key和字符串拼接起来,用md5得到sign并且用strtoupper转换成大写

④拼接成xml格式(见arraytoxml)方法

⑤调用统一下单接口https://api.mch.weixin.qq.com/pay/unifiedorder

⑥判断如果回调函数return_code和result_code的值都为SUCCESS的话则进行二次签名(非常重要)

⑦将appId(必须大写)、nonceStr、package(拼接成prepay_id=)、signType(MD5)、timeStamp拼成数组,过滤函数,拼接字符串,商户key,md5加密并转换成大写,得到二次签名

public function sendMoney($amount,$re_openid,$desc=‘你的简介’,$check_name=’’){

header(“Content-Type: text/html; charset=utf-8”);

$total_amount = (100) * $amount;//充值的金额

$data=array(

‘appid’=> ‘’,//商户账号appid

‘mch_id’=> ‘’,//商户号

‘nonce_str’=> $this->createNoncestr(),//随机字符串

‘out_trade_no’=> date(‘YmdHis’).rand(1000, 9999),//商户订单号

‘openid’=> $re_openid,//用户openid

‘total_fee’=>$total_amount,//金额

‘body’=> $desc,//充值描述信息

‘spbill_create_ip’=> ‘’,//Ip地址

‘trade_type’=>‘JSAPI’,

‘notify_url’=>’’//你的回调地址

);

$secrect_key = ‘’;//API密码

$data = array_filter($data);//过滤函数

ksort($data);

$str =’’;

foreach($data as $k=>$v) {

$str.=$k.’=’.$v.’&’;

}

$str.=‘key=’.$secrect_key;//把秘钥和字符串拼接起来

$data[‘sign’] = strtoupper(md5($str));//用md5得到sign 转换成大写

$xml = $this->arraytoxml($data);//拼接成xml的格式

$url=‘https://api.mch.weixin.qq.com/pay/unifiedorder’; //调用接口

$res = $this->wx_curl($xml,$url);

$return = $this->xmltoarray($res);

$responseObj = simplexml_load_string($res, ‘SimpleXMLElement’, LIBXML_NOCDATA);

$jsonStr = json_encode($responseObj);//转换为字符串

$jsonArray = json_decode($jsonStr,true);//转换为数组

if($jsonArray[‘return_code’]=‘SUCCESS’ && $jsonArray[‘result_code’]=‘SUCCESS’){

$time = time();//时间戳

$info = array(

‘appId’=>’’,

‘nonceStr’=>$jsonArray[‘nonce_str’],

‘package’=>‘prepay_id=’.$jsonArray[‘prepay_id’],

‘signType’=>‘MD5’,

‘timeStamp’=>"".$time."",

);

$info_s = array_filter($info);//过滤函数

ksort($info_s);

$str_s =’’;

foreach($info as $k=>$v) {

$str_s.=$k.’=’.$v.’&’;

}

$str_s.=‘key=你的商户秘钥’;//把秘钥和字符串拼接起来

$info[‘sign’]=strtoupper(md5($str_s));

$infos = array(

‘status’=>1,

‘content’=>‘success’,

‘result’=>$info

);

return $infos;

}else{

return json([

“status”=>0,

“content”=>$jsonArray[‘return_msg’],

“result”=>$jsonArray[‘err_code_des’]

]);

}

}

3.createNocestr随机字符串方法

public function createNoncestr($length =32){

$chars = “abcdefghijklmnopqrstuvwxyz0123456789”;

$str ="";

for ( $i = 0; $i < $length; $i++ ) {

$str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);

}

return $str;

}

4.arraytoxml拼接成xml

public function arraytoxml($data){

$str='';

foreach($data as $k=>$v) {

$str.=''.$v.''.$k.'>';

}

$str.='';

return $str;

}

/拼接xml/

public function xmltoarray($xml) {

libxml_disable_entity_loader(true);//禁止引用外部xml实体

$xmlstring = simplexml_load_string($xml, ‘SimpleXMLElement’, LIBXML_NOCDATA);

$val = json_decode(json_encode($xml),true);

return $val;

}

5.MD5加密方法

public function sign($info)

{

$key=’’;

ksort($info);

$buff = “”;

foreach ($info as $k => $v) {

if($k!=“sign” && $v!="" && !is_array($v)){

$buff.="".$v."&";

}

}

$buff = trim($buff,"&");

$string=$buff."&key=".$key;

$string = md5($string);

$sign = strtoupper($string);

return $sign;

}

到此tp5实现微信支付的方法就已经结束啦,直接返回给前端就可以啦,大家觉得不错的话给个赞哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值