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)
}
});
后端核心代码:
//支付费用
public function payJoinfee(){
$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\');
}
微信支付类
<?php
/*
* 小程序微信支付
*/
class WeixinPay{
protected $appid;
protected $mch_id;
protected $key;
protected $openid;
function __construct($appid,$openid,$mch_id,$key){
$this->appid=$appid;
$this->openid=$openid;
$this->mch_id=$mch_id;
$this->key=$key;
}
public function pay(){
//统一下单接口
$return=$this->weixinapp();
return $return;
}
//统一下单接口
private function unifiedorder(){
$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;
}
//微信小程序接口
private function weixinapp(){
//统一下单接口
$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位
private 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;
}
//作用:生成签名
private function getSign($Obj){
foreach ($Obj as $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_;
}
///作用:格式化参数,签名过程需要使用
private function formatBizQueryParaMap($paraMap, $urlencode){
$buff = "";
ksort($paraMap);
foreach ($paraMap as $k => $v){
if($urlencode)
{
$v = urlencode($v);
}
$buff .= $k . "=" . $v . "&";
}
$reqPar;
if (strlen($buff) > 0){
$reqPar = substr($buff, 0, strlen($buff)-1);
}
return $reqPar;
}
}
注:本文转载自【PHP自学中心】微信公众号
版权声明:本文为liu-bear原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。