前端代码

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 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/liu-bear/p/14304451.html