欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信小程序 支付功能实现PHP实例详解

程序员文章站 2022-06-20 08:04:28
微信小程序 支付功能实现php实例详解 前端代码: wx.request({ url: 'https://www.yourhost.com/weix...

微信小程序 支付功能实现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;
 }
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!