关于微信小程序支付

 

这是小程序的js;

url :是你自己请求的https服务器;加上你的code一起传过去;

接下来看后台:我用的是tp5框架;

        $code = $_GET['code'];  //这是你前台传过来的code值

        $appId  = '###';  //你的appid
        $secret = '###'; //你的AppSecret
        $mch_id = '##'; //你的商户号
 
$url='https://api.weixin.qq.com/sns/jscode2sessionappid='.$appId.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';
        $userOpen = file_get_contents($url);
        $openId  = json_decode($userOpen,true);
        $openId = $openId['openid']; //这是你所获取的openid

这几个是你所需要的数据;
         

        $data_sign = [
            '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'=>'JSAPI',
            'openid'=>$openId
        ];

        $key = ''; //商户密钥
        $sign = self::sign($data_sign,$key); 

        $xml_data = '<xml>
                 <appid>'.$appId.'</appid>
                 <mch_id>'.$mch_id.'</mch_id>
                 <nonce_str>'.$nonce_str.'</nonce_str>
                 <body>'.$body.'</body>
                 <out_trade_no>'.$out_trade_no.'</out_trade_no>
                 <total_fee>'.$total_fee.'</total_fee>
                 <spbill_create_ip>'.$spbill_create_ip.'</spbill_create_ip>
                 <notify_url>'.$notify_url.'</notify_url>
                 <trade_type>JSAPI</trade_type>
                 <openid>'.$openId.'</openid>
                 <sign>'.$sign.'</sign>
        </xml>';
        $ret_pay = self::http_post($xml_data);
        
        $payld = self::getPreld($ret_pay);
        $pre_pay_id = 'prepay_id='.$payld;

        $time = "'".time()."'";

        $data_pay_sign = [
            'appId'=>$appId,
            'timeStamp'=>$time,
            'nonceStr'=>md5(rand(1000,20000)),
            'signType'=>'MD5'
        ];

        $pay_sign = self::sign($data_pay_sign,$key);

        $data_pay_sign['paySign'] = $pay_sign;
        $data_pay_sign['package'] = $pre_pay_id;
        echo json_encode($data_pay_sign);
    }

    public function sign($data,$key){
        ksort($data);
        $str = '';
        foreach($data as $k=>$v){
            $str.=$k.'='.$v.'&';
        }
        $str.='key='.$key;
        return strtoupper(md5($str));
    }

    
    public function http_post($data){

        $url = "https://api.mch.weixin.qq.com/pay/unifiedorder";

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //不检查 ssl
        $output = curl_exec($ch);
        if (false === $output) {
          echo 'CURL Error:' . curl_error($ch);die;
        }
        return $output;
    }

    public static function getPreld($xml){

        $res = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);
        return $res->prepay_id;
    }

 

后台其实就是这么多东西;然后把你需要的数据返回到前台;填写这些值就可以了.

现在就已经可以付款成功了.

当然,如果实际操作的话,还需判断,查询你的数据库中的付款状态是否已经改变;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值