PHP接入微信H5支付

 

开发前配置

进行代码接入前,需在微信后台填写授权回调域名,此域名必须经过ICP备案

开发主要流程

  • 用户下单时选择微信支付
  • 商户进行业务逻辑处理并调用微信统一下单接口,微信H5交易类型为:trade_type=MWEB
  • 调用下单接口成功时,微信会返回包含支付跳转URL等相关参数,商户通过参数mweb_url调起支付中间页
  • 在中间页微信会进行H5权限的校验
  • 支付成功,微信会向商户发送异步结果通知

正式开发

调起微信支付,只说明必要参数

请求微信统一下单接口,接口地址:https://api.mch.weixin.qq.com/pay/unifiedorder

接口请求参数
  • appid:微信公众号iD
  • mch_id:账户号
  • nonce_str:随机字符串,不长于32位
  • sign:签名
  • body:商品描述
  • out_trade_no:商户订单号,不长于32位
  • total_fee:总金额,以分为单位
  • spbill_create_ip:用户端请求支付时的IP
  • notify_url:异步通知回调地址,必须是可直接访问地址,不能携带参数
  • trade_type:交易类型,如H5则是MWEB

以上便是H5支付下单所需要的参数

签名生成
  • 参与生成签名的参数必须非空
  • 参数按照ASCII码由小到大排序,参数名区分大小写
  • 按照上述规则,将参数拼接成如k1=v1&k2=v2....的字符串
  • 将上一步得到的字符串拼接上key, 如k1=v1&k2=v2&key=192006250b4c09247ec02e
  • 再将最后得到的字符串进行MD5加密,再转为大写,即为最终的sign值

代码:

    /**       * 组建签名       * @param array $params 请求参数       * @param string $key 秘钥       */     public function genSign($params, $key)     {         foreach ($params as $k=>$v) {             if (!$v) {                 unset($params[$k]);             }         }         ksort($params);         $paramStr = '';         foreach ($params as $k => $v) {             $paramStr = $paramStr . $k . '=' . $v . '&';         }         $paramStr = $paramStr . 'key='.$key;         $sign = strtoupper(md5($paramStr));         return $sign;     }
发起请求

将参数转为XML数据,即可发起请求
将数组转为XML代码:

    /**       * 将数组转为XML       * @param array $params 支付请求参数       */     public function array_to_xml($params)     {         if(!is_array($params)|| count($params) <= 0) {             return false;         }         $xml = "<xml>";         foreach ($params as $key=>$val) {             if (is_numeric($val)) {                 $xml.="<".$key.">".$val."</".$key.">";             } else {                 $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";             }         }         $xml.="</xml>";         return $xml;     }

请求代码:

        $ch = curl_init();         curl_setopt($ch, CURLOPT_URL, $url);         curl_setopt($ch, CURLOPT_HEADER, 0);         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);         curl_setopt($ch, CURLOPT_POST, 
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信