前言:网上都是~ 呵呵 自己搞 只要花时间 多问客服总会有的

只说程序不说准备工作 自己ID 或者秘钥都准备好了  写的有点儿乱 可以把所有的方法 放在一个文件中调用

 public function wechat ($doorder,$doczmoney,$doczbody) {
// H5 微信支付
$wxUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder"; //下单接口
$appid = ""; //公众账号ID
$mch_id ="";// 商户号
$nonce_str =$this->randStrpay(); //随机字符串
$key ="";
$body = $doczbody; //商品描述
$out_trade_no = $doorder;// 商户订单号
$total_fee = $doczmoney*100;// 我数据库存的是元 转换下 标价金额 f分
$device_info = ''; $spbill_create_ip = $this->getClientp();// 终端IP
$notify_url ="";// 通知地址
$trade_type ="MWEB";// 交易类型
//组合数组 方便字典升序
$paraMap = array('appid'=>$appid,
'mch_id'=>$mch_id,
'nonce_str'=>$nonce_str,
'body'=>$body,
'out_trade_no'=>$out_trade_no,
'total_fee'=>$total_fee,
'spbill_create_ip'=>$spbill_create_ip,
'notify_url'=>$notify_url,
'trade_type'=>$trade_type,
'device_info'=>$device_info
);
// 字典升序 下边有方法 这是摘出来的 自己复制到自己的位置 然后调用 下边几个调用都一样
$singStr = \Ruifi\Service\CommonService::formatParaMap($paraMap); //获取singvalue值
$sign =$this->autostr($singStr,$key);
// sign 值添加到数组
$mapSing = array_merge($paraMap,array('sign'=>$sign));
//print_r($mapSing);die;
//数组转xml
$arrXml = \Ruifi\Service\CommonService::arrayToXml($mapSing);
//post 发送
$wechatreslut = \Ruifi\Service\CommonService::postXmlCurl($arrXml,$wxUrl);
//接受xml
$xmlToarr = \Ruifi\Service\CommonService::xmlToArray($wechatreslut);
$xmlToarrStr = \Ruifi\Service\CommonService::utf8_to_gbk_arr($xmlToarr);
if ($xmlToarrStr['result_code'] =='SUCCESS'){
$wxMurl = $xmlToarrStr['mweb_url'];
header("Location: $wxMurl"); }
}
//32位随机字符串
function randStrpay($length=32) {
$rand='';
$randstr= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$max = strlen($randstr)-1;
mt_srand((double)microtime()*1000000);
for($i=0;$i<$length;$i++) {
$rand.=$randstr[mt_rand(0,$max)];
}
return $rand;
}
// 签名算法
function autostr($singStr,$key){
$stringSignTemp = $singStr."&key=$key";
$sign = md5($stringSignTemp);
$signValue = strtoupper($sign);
return $signValue;
}
//获取IP
function getClientp(){
$cip ="unknow";
if($_SERVER['REMOTE_ADDR']){
$cip = $_SERVER['REMOTE_ADDR'];
}elseif(getenv("REMOTE_ADDR")){
$cip =getenv("REMOTE_ADDR");
}
return $cip;
}
这些方法是 上边调用的 你自己随意
/* 字典升序*/
function formatParaMap($paraMap)
{
$buff = "";
ksort($paraMap);
foreach ($paraMap as $k => $v)
{
$buff .= $k . "=" . $v . "&";
}
$reqPar = '';
if (strlen($buff) > 0)
{
$reqPar = substr($buff, 0, strlen($buff)-1);
}
return $reqPar;
} /* 数组转xml */
function arrayToXml($arr)
{
$xml = "<xml>";
foreach ($arr as $key=>$val)
{
if (is_numeric($val))
{
$xml.="<".$key.">".$val."</".$key.">";
}
else{
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
}
$xml.="</xml>";
return $xml;
}
public function postXmlCurl($xml,$url,$second=30)
{
//初始化curl
$ch = curl_init();
curl_setopt($ch, CURLOP_TIMEOUT, $second);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
//运行curl
$data = curl_exec($ch);
curl_close($ch);
//返回结果
if($data)
{
curl_close($ch);
return $data;
}
else
{
$error = curl_errno($ch);
echo "curl出错,错误码:$error"."<br>";
curl_close($ch);
return false;
}
}
/* xml 转数组 */
public function xmlToArray($xml)
{
//将XML转为array
$array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $array_data;
}

微信H5支付开发全过程(除内置微信以外的浏览器)的更多相关文章

  1. PHP微信H5支付开发

    近来公司项目要求用到微信H5开发,因为微信开发文档处处都是坑,我也走了不少弯路,现在就把H5支付的过程记录一下,已备后用!! 首先 先去商户平台申请开通 H5支付!!!! 我们从微信官方下载H5支付d ...

  2. 微信H5支付开发(maven仓库版)

    官方文档:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1 开发之前确认开通了H5支付功能 一.安装微信sdk 二.创建config ...

  3. java进行微信h5支付开发

    最近在做微信支付开发用的框架是 srpingMVC mybatis spring 下面是开发流程图 我们只需要开发红色标记的模块就可以了. 具体参数详情可以查看微信开发者文档. 新手第一次写,写的不好 ...

  4. 微信H5支付开发步骤总结

    * 开发步骤: * 1.在微信公众号平台设置授权目录,即jsapi.php所在的目录 * 2.在微信支付平台下载证书,放到cert目录 * 3.在微信支付平台设置API秘钥,同时在WxPay.Conf ...

  5. Android通过外部浏览器调用微信H5支付,Android+PHP详解

    看了好多关于讲解微信H5支付开发的文章,大多数都是通过微信内部浏览器来调用支付接口(其实就是公众号支付),可能是因为H5支付接口刚开放不久吧. 微信官方体验链接:http://wxpay.wxutil ...

  6. 微信支付之微信H5支付(坑,ajax不支持重定向跳转)

    这里讲的是  微信h5支付,    是微信以外的手机浏览器调用微信h5支付  h5支付: H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起 ...

  7. 【第二十篇】C#微信H5支付 非微信内浏览器H5支付 浏览器微信支付

    微信开发者文档 微信H5支付官方文档   请阅读清楚  最起码把所有参数看一遍 这个地方也可以看看 微信案例 http://wxpay.wxutil.com/mch/pay/h5.v2.php,请在微 ...

  8. 微信支付-微信公众号支付,微信H5支付,微信APP支付,微信扫码支付

    在支付前,如果使用第三方MVC框架,则使用重写模式,服务器也需要配置该项 if (!-e $request_filename){ rewrite ^/(.*)$ /index.php/$ last; ...

  9. C#开发微信门户及应用(44)--微信H5页面开发的经验总结

    在我们开发微信页面的时候,需要大量用到了各种呈现的效果,一般可以使用Boostrap的效果来设计不同的页面,不过微信团队也提供很多这方面的资源,包括JSSDK的接口,以及Weui的页面样式和相关功能页 ...

随机推荐

  1. RabbitMQ持久化和非持久化

    但是,非持久化要比持久化速度更快. 队列是否需要持久化:看需求

  2. 将List<E>内对象按照某个字段排序

    主要用到java.util的Collections类 Collections.sort(list); 其中,E必须实现Comparable<E>接口

  3. topic costmap

    name: '/move_base/global_costmap/costmap', messageType: "nav_msgs/OccupancyGrid", 这个是全局地图, ...

  4. 在取变量名的时候,千万不要用new

    这样子是会报错的

  5. MyBatis:Error evaluating expression ''''. Return value () was not iterable错误

    Error evaluating expression ''''.  Return value () was not iterable 出现原因:xml文件中遍历List 时,该参数的实际值为非Lis ...

  6. Docs-.NET-C#-指南-语言参考-预处理器指令:#else(C# 参考)

    ylbtech-Docs-.NET-C#-指南-语言参考-预处理器指令:#else(C# 参考) 1.返回顶部 1. #else(C# 参考) 2015/07/20 #else 允许创建复合条件指令, ...

  7. Ionic4.x 中的 UI 组件(UI Components) 侧边栏ion-menu组件以及底部tabs结合 侧边栏 ion-menu

    1.侧边栏 ion-menu 组件的基本使用 1.创建项目 ionic start myApp sidemenu 2.配置项目 属性 作用 可选值 side 配置侧边栏的位置 start end me ...

  8. 使用Docker快速搭建Tensorflow开发环境

    当我刚开始学习使用scikit-learn时,总是会出现各种各样的包依赖问题,兜兜转转了一遍才全部安装好,现在的机器学习算法开发者大都使用tensorflow.pytorch来实现自己的想法,但依然会 ...

  9. Git——起步(待续)

    原文链接:Getting Started with Git

  10. MySQL数据库备份之mysqldump

    创建用户备份的用户 MariaDB [mysql]> create user 'backdata'@'localhost' identified by 'test@123456';Query O ...