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

作者:超哥 时间:2023-11-19 08:53:36 

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

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

来源:http://www.soswen.com/article/154

标签:PHP,微信小程序,支付
0
投稿

猜你喜欢

  • sql2008评估期已过的解决办法及序列号

    2024-01-13 10:32:11
  • pandas和spark dataframe互相转换实例详解

    2022-12-12 20:26:38
  • 抓包工具Fiddler的使用方法详解(Fiddler中文教程)

    2022-09-21 03:34:55
  • vue+springboot实现项目的CORS跨域请求

    2024-05-09 09:48:23
  • Python命名空间与作用域深入全面详解

    2022-03-07 08:36:10
  • python实现精准搜索并提取网页核心内容

    2021-04-07 09:14:04
  • GO语言文件的创建与打开实例分析

    2024-05-21 10:21:19
  • 在ASP.NET 2.0中操作数据之二十三:基于用户对修改数据进行限制

    2023-07-12 08:52:20
  • 基于Python实现的购物商城管理系统

    2021-08-27 15:06:43
  • 使用Python可设置抽奖者权重的抽奖脚本代码

    2023-08-27 09:17:19
  • python基础之函数的返回值

    2022-10-23 23:17:06
  • go语言开发中如何优雅得关闭协程方法

    2024-02-15 00:12:55
  • TypeScript函数和类型断言实例详解

    2024-04-17 10:00:09
  • 25个值得收藏的Python文本处理案例

    2022-06-19 15:38:29
  • Javascript浅拷贝与深拷贝实现

    2013-07-16 22:47:46
  • javascript 精确获取样式属性(上)

    2024-04-17 09:45:37
  • Python编程快速上手——疯狂填词程序实现方法分析

    2023-07-25 08:57:17
  • wxPython实现整点报时

    2023-06-11 05:25:39
  • SQL Server中的XML数据类型详解

    2024-01-15 20:56:44
  • 浅析Golang中的内存逃逸

    2024-05-05 09:28:21
  • asp之家 网络编程 m.aspxhome.com