微信小程序 支付功能实现PHP实例详解
微信小程序支付功能实现PHP实例详解
前端代码:
wx.request({
url:'https://www.yourhost.com/weixin/WeiActivity/payJoinfee',//改成你自己的链接
header:{
'Content-Type':'application/x-www-form-urlencoded'
},
method:'POST',
success:function(res){
console.log(res.data);
console.log('调起支付');
wx.requestPayment({
'timeStamp':res.data.timeStamp,
'nonceStr':res.data.nonceStr,
'package':res.data.package,
'signType':'MD5',
'paySign':res.data.paySign,
'success':function(res){
console.log('success');
wx.showToast({
title:'支付成功',
icon:'success',
duration:3000
});
},
'fail':function(res){
console.log('fail');
},
'complete':function(res){
console.log('complete');
}
});
},
fail:function(res){
console.log(res.data)
}
});
后端代码:
//支付费用
publicfunctionpayJoinfee(){
$appid='wx888888888';
$openid='oCQwY0Q_pzrQpu8888888';
$mch_id='141388888';
$key='9A0A86888888888';
import('Weixin.Lib.WeixinPay');
$weixinpay=new\WeixinPay($appid,$openid,$mch_id,$key);
$return=$weixinpay->pay();
$this->response($return,'json');
}
微信支付类
appid=$appid;
$this->openid=$openid;
$this->mch_id=$mch_id;
$this->key=$key;
}
publicfunctionpay(){
//统一下单接口
$return=$this->weixinapp();
return$return;
}
//统一下单接口
privatefunctionunifiedorder(){
$url='https://api.mch.weixin.qq.com/pay/unifiedorder';
$parameters=array(
'appid'=>$this->appid,//小程序ID
'mch_id'=>$this->mch_id,//商户号
'nonce_str'=>$this->createNoncestr(),//随机字符串
'body'=>'测试',//商品描述
'out_trade_no'=>'2015450806125346',//商户订单号
'total_fee'=>floatval(0.01*100),//总金额单位分
'spbill_create_ip'=>$_SERVER['REMOTE_ADDR'],//终端IP
'notify_url'=>'http://www.weixin.qq.com/wxpay/pay.php',//通知地址
'openid'=>$this->openid,//用户id
'trade_type'=>'JSAPI'//交易类型
);
//统一下单签名
$parameters['sign']=$this->getSign($parameters);
$xmlData=arrayToXml($parameters);
$return=xmlToArray(postXmlSSLCurl($xmlData,$url,60));
return$return;
}
//微信小程序接口
privatefunctionweixinapp(){
//统一下单接口
$unifiedorder=$this->unifiedorder();
$parameters=array(
'appId'=>$this->appid,//小程序ID
'timeStamp'=>''.time().'',//时间戳
'nonceStr'=>$this->createNoncestr(),//随机串
'package'=>'prepay_id='.$unifiedorder['prepay_id'],//数据包
'signType'=>'MD5'//签名方式
);
//签名
$parameters['paySign']=$this->getSign($parameters);
return$parameters;
}
//作用:产生随机字符串,不长于32位
privatefunctioncreateNoncestr($length=32){
$chars="abcdefghijklmnopqrstuvwxyz0123456789";
$str="";
for($i=0;$i<$length;$i++){
$str.=substr($chars,mt_rand(0,strlen($chars)-1),1);
}
return$str;
}
//作用:生成签名
privatefunctiongetSign($Obj){
foreach($Objas$k=>$v){
$Parameters[$k]=$v;
}
//签名步骤一:按字典序排序参数
ksort($Parameters);
$String=$this->formatBizQueryParaMap($Parameters,false);
//签名步骤二:在string后加入KEY
$String=$String."&key=".$this->key;
//签名步骤三:MD5加密
$String=md5($String);
//签名步骤四:所有字符转为大写
$result_=strtoupper($String);
return$result_;
}
///作用:格式化参数,签名过程需要使用
privatefunctionformatBizQueryParaMap($paraMap,$urlencode){
$buff="";
ksort($paraMap);
foreach($paraMapas$k=>$v){
if($urlencode)
{
$v=urlencode($v);
}
$buff.=$k."=".$v."&";
}
$reqPar;
if(strlen($buff)>0){
$reqPar=substr($buff,0,strlen($buff)-1);
}
return$reqPar;
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!