大家好,欢迎来到IT知识分享网。
微信订单支付流程主要分为以下几个步骤:
1.商户服务器向微信支付提交统一下单请求,获取到预支付交易会话标识prepay_id。
2.商户服务器生成客户端调起支付所需的参数(如签名sign、时间戳timestamp等),并将prepay_id等信息返回给客户端。
3.客户端通过调用微信支付SDK发起支付请求,并传入上一步中生成的参数。
4.微信支付处理支付请求,用户输入密码完成支付操作。
5.微信支付将支付结果通知商户服务器,商户服务器对支付结果进行处理。
下面是一个简化版的代码示例,仅供参考:
统一下单API请求
$url = 'https://api.mch.weixin..com/pay/unifiedorder'; //微信支付统一下单API接口 $params = [ 'appid' => 'your_appid', //微信支付分配的公众账号ID(企业号corpid即为此appId) 'mch_id' => 'your_mchid', //微信支付分配的商户号 'nonce_str' => uniqid(), //随机字符串,不长于32位 'body' => 'Your Product Name', //商品描述 'out_trade_no' => 'Your Order Number', //商户系统内部的订单号 'total_fee' => 100, //订单总金额,单位为分 'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], //APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP 'notify_url' => 'Your Notify Url', //接收微信支付异步通知回调地址 'trade_type' => 'JSAPI', //交易类型,取值如下:JSAPI,NATIVE,APP等 'openid' => 'Your User Openid' //用户在商户appid下的唯一标识 ]; $params['sign'] = generate_sign($params, 'your_pay_key'); //生成签名 $result = post_request($url, array_to_xml($params)); //发送POST请求 $response = xml_to_array($result); //处理API返回结果 if ($response['return_code'] == 'SUCCESS' && $response['result_code'] == 'SUCCESS') {
$prepay_id = $response['prepay_id']; //获取预支付交易会话标识prepay_id }
生成客户端调起支付所需的参数
$timestamp = time(); $noncestr = uniqid(); $params = [ 'appId' => 'your_appid', 'timeStamp' => strval($timestamp), 'nonceStr' => $noncestr, 'package' => 'prepay_id=' . $prepay_id, 'signType' => 'MD5' ]; $params['paySign'] = generate_sign($params, 'your_pay_key'); //生成签名
客户端发起支付请求
WeixinJSBridge.invoke('getBrandWCPayRequest', <?php echo json_encode($params); ?>, function(res){
if (res.err_msg == "get_brand_wcpay_request:ok") {
//支付成功 } else {
//支付失败 } });
处理支付结果
$data = file_get_contents('php://input'); //获取POST请求数据 $response = xml_to_array($data); //处理微信支付回调数据 if ($response['return_code'] == 'SUCCESS' && $response['result_code'] == 'SUCCESS') {
//验证签名,确保数据安全 if (verify_sign($response, 'your_pay_key')) {
$out_trade_no = $response['out_trade_no']; //商户订单号 $transaction_id = $response['transaction_id']; //微信支付订单号 $total_fee = $response['total_fee']; //订单总金额,单位为分 //更新订单状态等相关操作 } }
以上代码仅供参考,实际应用中还需根据具体情况进行修改和调整。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/146407.html