轩宇网 - 支付
type: channel
link: http://xysoft.cc/tag/支付
items: PHP微信公众号开发之微信企业付款给个人
items: PHP实现微信企业转账功能
items: PHP微信支付之公众号支付功能
items: 微信小程序支付功能实现及PHP接口代码
items: PHP 接入微信扫码支付
items: PHP微信H5支付开发实例

PHP微信公众号开发之微信企业付款给个人
type: item
date: 2018-10-06T15:00:00+08:00
description: 这篇文章主要为大家详细介绍了php微信公众号开发之微信企业付款给个人，具有一定的参考价值，感兴趣的小伙伴们可以参考一下本文实例为大家分享了php微信企业付款给个人的具体代码，供大家参考，具体内容如下以下有关微信支付中企业付款的介绍及编码参考自微信支付开发文档，如图所示<?php /* <!--微信企业付款给个人--!> 具体细节参考微信支付开发文档 参数 $openid个人openid $re_user_name个人真实姓名 $amount付款金额 $partner_trade_no商户订单号 $desc描述 如果付款成功，返回true,否则返回false */ private function weixin_transfer_money($openid,$re_user_name,$amount,$partner_trade_no,$desc){ //请求参数 //公众号appid（字段名）--mch_appid(变量名)--1(必填) //输入你的公众号appid $data['mch_appid']="**************"; //商户号--mchid--1 //输入你的商户号 $data['mchid']="*************"; //设备号--device_info--0 //随机字符串--nonce_str--1 $data['nonce_str']=$this->get_unique_value(); //签名--sign--1 $data['sign']=""; //商户订单号--partner_trade_no--1 $data['partner_trade_no']=$partner_trade_no; //用户openid--openid--1 $data['openid']=$openid; //校验用户姓名选项--check_name--1 $data['check_name']="OPTION_CHECK"; //收款用户姓名--re_user_name--0 $data['re_user_name']=$re_user_name; //金额--amount--1 $data['amount']=$amount; //企业付款描述信息--desc--1 $data['desc']=$desc; //IP地址--spbill_create_ip--1 $data['spbill_create_ip']=$_SERVER['LOCAL_ADDR']; //生成签名 //对数据数组进行处理 //API密钥，输入你的appsecret $appsecret="*************"; $data=array_filter($data); ksort($data); $str=""; foreach($data as $k=>$v){ $str.=$k."=".$v."&"; } $str.="key=".$appsecret; $data['sign']=strtoupper(MD5($str)); /* 付款操作： 1.将请求数据转换成xml 2.发送请求 3.将请求结果转换为数组 4.将请求信息和请求结果录入到数据库中 5.判断是否通信成功 6.判断是否付款成功 */ //企业付款接口地址 $url="https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; //1.将请求数据由数组转换成xml $xml=$this->arraytoxml($data); //2.进行请求操作 $res=$this->curl($xml,$url); //3.将请求结果由xml转换成数组 $arr=$this->xmltoarray($res); //4.将请求信息和请求结果录入到数据库中，可以根据自己的需要进行处理，$arr是返回的结果数组 $transfer['partner_trade_no']=$data['partner_trade_no']; $transfer['request_data']=serialize($data); $transfer['response_data']=serialize($arr); if($arr['return_code']=="SUCCESS" && $arr['result_code']=="SUCCESS"){ //5. 判断是否通讯成功 6.判断是否付款成功 $transfer['success']=1; $transfer_res['success']=1; }else{ $transfer['success']=0; $transfer_res['succe…

PHP实现微信企业转账功能
type: item
date: 2018-10-04T10:43:51+08:00
description: 这篇文章主要为大家详细介绍了php实现微信企业转账功能，具有一定的参考价值，感兴趣的小伙伴们可以参考一下本文实例为大家分享了php实现微信企业转账的具体代码，供大家参考，具体内容如下：WxTransfers.Config.php<?php /** * 配置账号信息 * 配置要和证书在一起！！！！ */ class WxTransfersConfig { //=======【基本信息设置】============== // /** * TODO: 修改这里配置为您自己申请的商户信息 * 微信公众号信息配置 * * APPID：绑定支付的APPID（必须配置，开户邮件中可查看） * * MCHID：商户号（必须配置，开户邮件中可查看） * * KEY：商户支付密钥，参考开户邮件设置（必须配置，登录商户平台自行设置） * 设置地址：https://pay.weixin.qq.com/index.php/account/api_cert * */ const APPID = ''; const MCHID = ''; const KEY = ''; //=======【证书路径设置】===================================== /** * TODO：设置商户证书路径 * 证书路径,注意应该填写绝对路径,发送红包和查询需要，可登录商户平台下载 * API证书下载地址：https://pay.weixin.qq.com/index.php/account/api_cert，下载之前需要安装商户操作证书） * @var path 跟这个文件同一目录下的cert文件夹放置证书！！！！ */ const SSLCRET12 = 'cert/apiclient_cert.p12'; const SSLCERT_PATH = 'cert/apiclient_cert.pem'; const SSLKEY_PATH = 'cert/apiclient_key.pem'; const SSLROOTCA = 'cert/rootca.pem'; //=======【证书路径设置】===================================== /** * 获取文件的路径，证书需要完整路径 * @return string */ public static function getRealPath(){ return __DIR__.'/'; } } WxTransfers.Api.php<?php require_once "WxTransfers.Config.php"; /** * 微信企业转账工具类 */ class WxTransfers { // 企业转账请求地址 const TRANSFERS_URL = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; //获取转账信息地址 const GETINFO_URL='https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo'; // 转账需要的配置 'wxappid','mch_id','key' private $_keys; // 转账需要的证书文件 'api_cert', 'api_key', 'rootca',请传入绝对路径！！！ private $_cert; protected $log_file; public $error; // 相关配置必备参数 protected $_parameters = array(); // 最后一次生产的订单号 protected $_lastPartnerTradeNo; // 记录最后一次发送请求的结果对象 protected $_lastResult; // 最后一次随机数 protected $_lastRandNum; public function __construct($config) { $keys = array( 'wxappid', 'mch_id', 'key' ); $files = array( 'api_cert', 'api_key', 'rootca' ); foreach ($keys as $key) { try { $this->_keys[$key] = $config[$key]; } catch (Exception $e) { throw new Exception('参数缺失：' . $key); } } foreach ($files as $file) { try { $cret_file =…

PHP微信支付之公众号支付功能
type: item
date: 2018-08-27T08:10:00+08:00
description: 这篇文章主要为大家详细介绍了PHP微信支付之公众号支付功能的原生态写法，具有一定的参考价值，感兴趣的小伙伴们可以参考一下网上的很多PHP微信扫码支付接入教程都颇为复杂，且需要配置和引入较多的文件，本人通过整理后给出一个单文件版的，希望可以给各位想接入微信扫码支付的带来些许帮助和借鉴意义。将该文件放到你的授权目录下，并在微信里访问这个文件，即可看到演示效果。效果如下： 需要注意的事项： 1.该文件需放到支付授权目录下，可以在微信支付商户平台->产品中心->开发配置中设置。 2.如提示签名错误可以通过微信支付签名验证工具进行验证：微信公众平台支付接口调试工具具体实现代码如下：<?php header('Content-type:text/html; Charset=utf-8'); $mchid = 'xxxxx'; //微信支付商户号 PartnerID 通过微信支付商户资料审核后邮件发送 $appid = 'xxxxx'; //微信支付申请对应的公众号的APPID $appKey = 'xxxxx'; //微信支付申请对应的公众号的APP Key $apiKey = 'xxxxx'; //https://pay.weixin.qq.com 帐户设置-安全设置-API安全-API密钥-设置API密钥 //①、获取用户openid $wxPay = new WxpayService($mchid,$appid,$appKey,$apiKey); $openId = $wxPay->GetOpenid(); //获取openid if(!$openId) exit('获取openid失败'); //②、统一下单 $outTradeNo = uniqid(); //你自己的商品订单号 $payAmount = 0.01; //付款金额，单位:元 $orderName = '支付测试'; //订单标题 $notifyUrl = 'https://www.xxx.com/wx/'; //付款成功后的回调地址(不要有问号) $payTime = time(); //付款时间 $jsApiParameters = $wxPay->createJsBizPackage($openId,$payAmount,$outTradeNo,$orderName,$notifyUrl,$payTime); $jsApiParameters = json_encode($jsApiParameters); ?> 微信支付样例-支付 该笔订单支付金额为<?php echo $payAmount?>元钱 立即支付 <?php class WxpayService { protected $mchid; protected $appid; protected $appKey; protected $apiKey; public $data = null; public function __construct($mchid, $appid, $appKey,$key) { $this->mchid = $mchid; //https://pay.weixin.qq.com 产品中心-开发配置-商户号 $this->appid = $appid; //微信支付申请对应的公众号的APPID $this->appKey = $appKey; //微信支付申请对应的公众号的APP Key $this->apiKey = $key; //https://pay.weixin.qq.com 帐户设置-安全设置-API安全-API密钥-设置API密钥 } /** * 通过跳转获取用户的openid，跳转流程如下： * 1、设置自己需要调回的url及其其他参数，跳转到微信服务器https://open.weixin.qq.com/connect/oauth2/authorize * 2、微信服务处理完成之后会跳转回用户redirect_uri地址，此时会带上一些参数，如：code * @return 用户的openid */ public function GetOpenid() { //通过code获得openid if (!isset($_GET['code'])){ //触发微信返回code码 $scheme = $_SERVER['HTTPS']=='on' ? 'https://' : 'http://'; $baseUrl = urlencode($scheme.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']); $url = $this->__CreateOauthUrlForC…

微信小程序支付功能实现及PHP接口代码
type: item
date: 2018-08-27T07:31:00+08:00
description: 这篇文章主要为大家详细介绍了微信小程序支付的PHP实现代码，具有一定的参考价值，感兴趣的小伙伴们可以参考一下本文实例为大家分享了微信小程序支付PHP具体代码，供大家参考，具体内容如下服务器端获取 openidGetopenid.php<?php header('Content-type: application/json; charset=UTF-8'); $APPID="";//填写小程序appid $SECRET="";//填写小程序secret $JSCODE=""; if(isset($_GET['js_code'])){ $JSCODE=$_GET['js_code']; $url="https://api.weixin.qq.com/sns/jscode2session?appid=".$APPID ."&secret=".$SECRET."&js_code=".$JSCODE."&grant_type=authorization_code"; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_HEADER, 0); $data = curl_exec($curl); $array=json_decode($data,true); curl_close($curl); $openid=isset($array['openid'])?$array['openid']:$array['errcode']; if($openid=="40029"){ $response["result"] = 0; $response["msg"] = "invalid code"; $response["openid"] = $openid; echo json_encode($response); }else{ $response["result"] = 1; $response["msg"] = "user exist"; $response["openid"] = $openid; echo json_encode($response); } }小程序存储openid 在app.js中getUserInfo:function(cb){ var that = this if(this.globalData.userInfo){ typeof cb == "function" && cb(this.globalData.userInfo) }else{ wx.login({ success: function (res) { if (res.code) { var code = res.code; wx.getUserInfo({ success: function (res2) { console.log(res2); that.globalData.userInfo = res2.userInfo; typeof cb == "function" && cb(that.globalData.userInfo) var encryptedData = encodeURIComponent(res2.encryptedData);//一定要把加密串转成URI编码 var iv = res2.iv; //请求自己的服务器 //Login(code, encryptedData, iv); wx.showToast({ title: '正在登录...', icon: 'loading', duration: 10000 }); //请求服务器 wx.request({ url: API_URL,//Getopenid.php data: { js_code: code, }, method: 'GET', header: { 'content-type': 'application/json' }, // 设置请求的 header success: function (res) { // success wx.hideToast(); console.log("JSON:" + res.data); if (res.data.result=="1"){//获取openid成功 wx.setStorage({//存储openid key: "openid", data: res.data.openid }) }else{ w…

PHP 接入微信扫码支付
type: item
date: 2018-08-12T17:48:00+08:00
description: 微信扫码支付分为两种模式，模式一比较复杂，需要公众号配置回调地址。模式二比较简单，只需要在代码中配置回调地址就可以了。我这次使用的是模式二。需要配置参数，const APPID = 'xxx'; const MCHID = 'xxx'; const KEY = 'xxx'; const APPSECRET = 'xxx';配置公众号的appid，appsecret。以及微信支付的mchid与key。生成二维码，这个页面需要自己去美化，不像支付宝那样自带效果。require_once "./phpcms/plugin/weixinpay/lib/WxPay.Api.php"; require_once "./phpcms/plugin/weixinpay/example/WxPay.NativePay.php"; require_once './phpcms/plugin/weixinpay/example/log.php'; $input = new WxPayUnifiedOrder(); $input->SetBody('预订'.$product_info['name'].'订单'); $input->SetAttach('预订'.$product_info['name'].'订单'); $input->SetOut_trade_no($order_info['orderno']); $input->SetTotal_fee($order_info['payprice'] * 100); $input->SetTime_start(date("YmdHis")); $input->SetTime_expire(date("YmdHis", time() + 600)); $input->SetGoods_tag(""); $input->SetNotify_url("http://www.ayuanduanzu.com/wxpay/notify.php"); // 地址是外网能访问的，且不能包含参数 $input->SetTrade_type("NATIVE"); $input->SetProduct_id($product_info['id']); $notify = new NativePay(); $result = $notify->GetPayUrl($input); $code_url = $result["code_url"]; 这里的回调地址很有讲究，扫码支付成功后，微信会自动调用这个地址。这个地址不能包含任何参数，否则调用失败。啥都看不到！微信调用的时候，会传递xml类型的参数。include_once "../phpcms/base.php"; // 处理回调数据 error_reporting(E_ERROR); require_once "../phpcms/plugin/weixinpay/lib/WxPay.Api.php"; require_once '../phpcms/plugin/weixinpay/lib/WxPay.Notify.php'; require_once '../phpcms/plugin/weixinpay/example/log.php'; //初始化日志 $logHandler= new CLogFileHandler("../logs/".date('Y-m-d').'.log'); $log = Log::Init($logHandler, 15); class PayNotifyCallBack extends WxPayNotify //查询订单 public function Queryorder($transaction_id) { $input = new WxPayOrderQuery(); $input->SetTransaction_id($transaction_id); $result = WxPayApi::orderQuery($input); Log::DEBUG("query:" . json_encode($result)); if(array_key_exists("return_code", $result) && array_key_exists("result_code", $result) && $result["return_code"] == "SUCCESS" && $result["result_code"] == "SUCCESS") { return true; } return false; } //重写回调处理函数 public function NotifyProcess($data, &$msg) { …

PHP微信H5支付开发实例
type: item
date: 2018-08-12T17:41:43+08:00
description: 最近由于业务所需，对接了微信H5支付，然而微信支付对这块并没有现成的demo可用，所以就必须自己老老实实对照开发文档去写咯！但这对于刚接触的童鞋来说，坑多多少少还是有的，所以寻思着把自己的经验分享出来，毕竟现成的用的还是多巴适的嘛！ 好了，官方文档的那一套就不多说了，详情见官方文档。 在这里，我主要分成了三个文件：WxPay.Config.php（支付配置文件）、Weixin.class.php（支付类）以及PayMentController.class.php（支付文件）。首先，WxPay.Config.php配置文件主要包含了商户appId、商户号、商家key、异步回调URL、支付场景信息，如下：class WxPayConfig { public static $appid = '微信支付的公众号appid'; public static $mchid = '微信支付分配的商户号'; public static $key = '微信商户自己设置的安全key'; public static $notify_url = '商户侧接收微信支付异步通知的URL'; public static $scene_info = '{"h5_info":{"type":"Wap","wap_url":" 发起微信H5支付H5的URL","wap_name":"支付"}}'; }然后，封装Weixin.class.php支付类，主要调用统一下单Api，这里不多说了，直接上代码：<?php require_once "lib/WxPay.Config.php"; class Weixin { /** * 微信H5下单付款 * @order 付款信息 * @bodys 付款内容 * */ function getCode($order,$bodys){ $url = "https://api.mch.weixin.qq.com/pay/unifiedorder";//微信传参地址 //1.获取调用统一下单接口所需必备参数 $appid =WxPayConfig::$appid;//微信公众号appid $mch_id = WxPayConfig::$mchid;//微信支付商户号 $key = WxPayConfig::$key;//自己设置的微信商家key $out_trade_no = $order['order_sn'];//平台内部订单号 $nonce_str=MD5($out_trade_no);//随机字符串 $body = $bodys;//付款内容 $total_fee = $order['order_amount']*100;//付款金额，单位为分 $spbill_create_ip = getIP(); //获得用户设备IP $attach = 'weixinh5';//附加数据（自定义，在支付通知中原样返回） $notify_url = WxPayConfig::$notify_url; //异步回调地址，需外网可以直接访问 $trade_type = 'MWEB';//交易类型，微信H5支付时固定为MWEB $scene_info =WxPayConfig::$scene_info;//场景信息 //2.将参数按照key=value的格式，并按照参数名ASCII字典序排序生成字符串 $signA ="appid=$appid&attach=$attach&body=$body&mch_id=$mch_id&nonce_str=$nonce_str¬ify_url=$notify_url&out_trade_no=$out_trade_no&scene_info=$scene_info&spbill_create_ip=$spbill_create_ip&total_fee=$total_fee&trade_type=$trade_type"; //3.拼接字符串 $strSignTmp = $signA."&key=$key"; //4.MD5加密后转换成大写 $sign = strtoupper(MD5($strSignTmp)); //5.拼接成所需XML格式 $post_data = "<xml> <appid>$appid</appid> <attach>$attach</attach> $body <mch_id>$mch_id</mch_id> <nonce_str>$nonce_str</nonce_str> <notify_url>$notify_url</notify_url> <out_trade_no>$out_trade_no</out_trade_no> <spbill_create_ip>$s…