微信支付统一下单的坑跟回调地址代码示例

 这里我是把微信里的回调dome 拿出来重写了一下,  在配置回调地址的时候,要确定你的回调链接地址一定要能够访问,

 里面注释的比较多- -是我自己测试用的 也可以拿来作为参考,

 配合上面一篇我写的统一下单dome文章作为 结合来做,

声明一下:支付的重点在于统一下单,在统一下单是非常容易出错的地方,各位老铁一定要仔细检查,然后断点多看看,避免一个坑进去就出不来了,我当初就查了好多文档,

下面是我为大家找的比较容易出错的参数,结合上文去做:

  1. $spbill_create_ip = '主机ip';

  2. $total_fee = $fee*100;//因为充值金额最小是1 而且单位为分 如果是充值1元所以这里需要*100

  3. $trade_type = 'NATIVE';//交易类型 默认 这里按照文档去改就可以了

  4. $appid ='';//如果是公众号 就是公众号的appid

  5. $mch_id ='商户号';

  6. $wx_key = '';//这是秘钥,是统一下单签名的时候用的

我也就做过微信的跟支付宝支付,  都是在统一下单的地方容易出错,就是我上面列的几个参数

他们两个的形式都是基本差不多的,如果微信支付做出来了,支付宝也就自然而然了,pc跟h5 也只是形式上的不同,大同小异而已, 祝各位老铁早日修成正果~~

 附回调代码:

<?php


namespace Home\Controller;
// use Think\Page;
// use Think\Verify;
//use Think\Cache\Driver\Redis;
class NotifyController extends BaseController {
  public function index()
  {
    $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
    // 这句file_put_contents是用来查看服务器返回的XML数据 测试完可以删除了
    //   file_put_contents(APP_ROOT.'/log2.txt',$res,FILE_APPEND);
  // Log::info('5555555555555555555555555555555555');
  // Log::info($xml);
   //将服务器返回的XML数据转化为数组
    $data = $this->xml_to_array($xml);
  // $objectxml = simplexml_load_string($xml);//将文件转换成 对象
  // $xmljson= json_encode($objectxml );//将对象转换个JSON
  // $data=json_decode($xmljson,true);//将json转换成数组

       // 保存微信服务器返回的签名sign
       $data_sign = $data['sign'];
       // sign不参与签名算法
       unset($data['sign']);
       $sign = $this->signs($data);
        $result='';
       // 判断签名是否正确  判断支付状态
       if ( ($sign===$data_sign) && ($data['return_code']=='SUCCESS') && ($data['result_code']=='SUCCESS') ) {
           $result = $data;
           //获取服务器返回的数据
          //  $result为返回的数组,这里进行业务逻辑处理~

       }else{

            $str='<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名失败]]></return_msg></xml>';
       }
       // 返回状态给微信服务器
       if ($result) {

           $str='<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';

       }else{

           $str='<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名失败]]></return_msg></xml>';

       }
       // echo $str;
    
       // Log::info($str);
       // Log::record($str);
       
       return $str;
     }
    /*
    *签名算法
    */
    private function signs($data){
        ksort($data);
        $stringA = '';
        foreach ($data as $key=>$value){
            if(!$value) continue;
            if($stringA) $stringA .= '&'.$key."=".$value;
            else $stringA = $key."=".$value;
        }
        $wx_key = '************************';//申请支付后有给予一个商户账号和密码,登陆后自己设置key
    $stringSignTemp = $stringA.'&key='.$wx_key;//申请支付后有给予一个商户账号和密码,登陆后自己设置key
    return strtoupper(md5($stringSignTemp));
  }
  /*
  *格式转数据
  */
  public function xml_to_array($xml){
        if(!$xml){
            return false;
        }
        //将XML转为array
        //禁止引用外部xml实体
        libxml_disable_entity_loader(true);
        $data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
        return $data;
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 答1: 微信小程序的统一代码如下所示: ```javascript wx.requestPayment({ timeStamp: '', // 时间戳 nonceStr: '', // 随机字符串 package: '', // 统一接口返的 prepay_id 参数值,格式如:prepay_id=*** signType: 'MD5', // 签名算法,目前支持 MD5 paySign: '', // 签名 success: function (res) { // 支付成功 }, fail: function (res) { // 支付失败 } }); ``` 需要注意的是,用此代码前需要先微信支付接口进行订支付统一操作,获取到 prepay_id 参数值后才能使用此代码进行支付。同时,还需要对参数进行正确的填写和签名处理,确保支付的安全性和准确性。 ### 答2: 微信小程序统一是指通过微信支付接口实现用户在小程序内进行支付的功能。下面是一个示例微信小程序统一代码: 1. 在小程序中创建一个按钮,当用户点击按钮时触发下操作。 ``` <view> <button bindtap="unifiedOrder">下</button> </view> ``` 2. 在小程序的.js文件中编写下函数unifiedOrder,该函数会微信支付接口进行统一。 ``` Page({ unifiedOrder: function() { wx.request({ url: 'https://api.mch.weixin.qq.com/pay/unifiedorder', method: 'POST', data: { appid: '你的小程序APPID', mch_id: '你的商户号', nonce_str: '随机字符串', sign: '签名', body: '商品描述', out_trade_no: '商户订号', total_fee: '订金额', spbill_create_ip: '终端IP', notify_url: '支付结果通知地址', trade_type: '交易类型' }, success: function(res) { // 支付接口用成功,获取prepay_id var prepay_id = res.data.prepay_id; // 微信小程序支付接口 wx.requestPayment({ timeStamp: '', nonceStr: '', package: '', signType: '', paySign: '', success: function(res) { // 支付成功函数 }, fail: function(res) { // 支付失败函数 } }); }, fail: function(res) { // 支付接口用失败 } }); } }); ``` 以上是一个简微信小程序统一代码示例,具体参数的填写需要根据自己的实际情况进行修改。另外,该示例只包含了下接口和支付接口的用,如果需要进行更复杂的逻辑处理,还需要根据具体需求进行代码扩展。 ### 答3: 微信小程序统一是指通过微信支付接口实现用户在小程序中购买商品或服务时的支付功能。下面是一个简示例代码,实现微信小程序统一的流程: 1. 在小程序的后台服务器上创建一个接口,用于处理下请求。这个接口需要接收以下参数:商品名称、商品总价、用户id等。 ```javascript // 假设接口地址为 /unified_order const app = getApp(); Page({ data: { goodsName: "商品名称", totalPrice: 100, userId: "用户id", }, payOrder: function() { wx.request({ url: `${app.globalData.serverUrl}/unified_order`, method: 'POST', data: { goodsName: this.data.goodsName, totalPrice: this.data.totalPrice, userId: this.data.userId, }, success: function(res) { // 获取prepay_id const prepayId = res.data.prepayId; // 微信支付API wx.requestPayment({ timeStamp: res.data.timeStamp, nonceStr: res.data.nonceStr, package: res.data.package, signType: res.data.signType, paySign: res.data.paySign, success: function(res) { // 支付成功函数 }, fail: function(res) { // 支付失败函数 } }); }, fail: function(res) { // 下失败函数 } }); }, }); ``` 2. 在后台服务器接口中,微信接口实现统一,并返给小程序预支付信息(如prepayId、时间戳、随机字符串、签名等)。 3. 小程序前端收到预支付信息后,微信支付API进行支付支付成功后,可以进行相应的后续处理。 以上是一个简微信小程序统一代码示例,具体实现还需根据实际需求和接口文档进行整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值