微信支付思路

举报
tea_year 发表于 2024/11/06 20:03:13 2024/11/06
【摘要】 1.PC网站-微信支付要将PC网站接入微信支付,您需要完成以下步骤:获取商户号:首先,您需要注册一个微信商户号。您可以通过微信支付的官方网页申请一个商户号。开通微信支付:申请商户号后,您需要完成微信支付的开通流程。具体步骤可以通过微信支付的官方文档找到。配置支付参数:在接入微信支付前,您需要根据官方文档的要求配置支付参数,包括公众号的AppID、商户号、API密钥等。用户选择微信支付后,需要...

1.PC网站-微信支付

要将PC网站接入微信支付,您需要完成以下步骤:

  1. 获取商户号:首先,您需要注册一个微信商户号。您可以通过微信支付的官方网页申请一个商户号。

  2. 开通微信支付:申请商户号后,您需要完成微信支付的开通流程。具体步骤可以通过微信支付的官方文档找到。

  3. 配置支付参数:在接入微信支付前,您需要根据官方文档的要求配置支付参数,包括公众号的AppID、商户号、API密钥等。

  4. 用户选择微信支付后,需要将购买的商品Id,商品数量,金额,token等信息传送到开发者服务器

  5. 开发者服务器在接收到商品Id、商品数量,金额,并从token中解析出用户id后,生成服务器订单数据(存入订单表)

  6. 之后,开发者服务器会调用微信支付接口,并将商品信息、订单号、支付金额等作为参数传递给微信支付接口。 微信生成预支付订单(prepay_id),

  7. 并返回一个支付链接给后端, 后端可以由此生成二维码返回给前端 (和小程序支付不一样)

请求参数

{
    "mchid": "1900006XXX",  // 商家的商户号
    "out_trade_no": "H51217752501201407033233368018",  //商户订单号
    "appid": "wxdace645e0bc2cXXX",   // 应用appid
    "description": "Image形象店-深圳腾大-QQ公仔",
    "notify_url": "https://weixin.qq.com/",  //回调,向后端返回支付结果
    "amount": {
        "total": 1,
        "currency": "CNY"
    },
    "scene_info": {
        "payer_client_ip": "127.0.0.1",
        "h5_info": {
            "type": "Wap"
        }
    }
}

返回参数

{
    "h5_url": "https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx2916263004719461949c84457c735b0000&package=2150917749"
}
  1. 调起支付:用户用微信手机端扫描二维码,进入微信支付的链接

  2. 接下来的一系列操作都是由用户来操作的,包括了微信支付密码,指纹等验证,确认支付之后执行鉴权调起支付。

  3. 用户在微信支付收银台完成支付或取消支付

  4. 用户支付完成后,微信会异步通知后台服务器。后台服务器根据微信后台返回的支付结果来更新订单的状态

  5. 这个过程中,前端页面通过定时器不断轮询后端接口,查看订单支付状态,根据订单状态来展示前端页面。 <a name="OgJOn"></a>

2.微信小程序-微信支付-面试题回答

  1. 获取商户号:首先,您需要注册一个微信商户号。您可以通过微信支付的官方网页申请一个商户号。

  2. 开通微信支付:申请商户号后,您需要完成微信支付的开通流程。具体步骤可以通过微信支付的官方文档找到。

  3. 配置支付参数:在接入微信支付前,您需要根据官方文档的要求配置支付参数,包括公众号的AppID、商户号、API密钥等。

  4. 打开小程序,点击直接下单。

  5. 此时,如果已经登录,直接下单,如果还没有登录,则 用wx.login获取用户临时登录凭证code,发送到后端服务器换取openId, openId会加密到token中传回客户端

  6. 在下单时,小程序需要将购买的商品Id,商品数量,以及token传送到开发者服务器。

  7. 开发者服务器在接收到商品Id、商品数量, 并从token解析出openId后,生成服务器订单数据(存入订单表),同时经过一定的签名算法,向微信支付发送请求,获取预付单信息(prepay_id),同时将获取的数据再次进行相应规则的签名,向小程序端响应必要的信息。

  8. 小程序端在获取对应的参数后,调用wx.requestPayment()发起微信支付,唤醒支付工作台,进行支付。

wx.requestPayment({
  // 时间戳
  timeStamp: '',
  // 随机字符串
  nonceStr: '',
  // 统一下单接口返回的 prepay_id 参数值
  package: '',
  // 签名算法,应与后台下单时的值一致
  signType: '',
  // 签名
  paySign: '',
  // 调用成功回调
  success (res) {
     
  },
  // 失败回调
  fail () {},
  // 接口调用结束回调
  complete () {}
})
  1. 接下来的一系列操作都是由用户来操作的,包括了微信支付密码,指纹等验证,确认支付之后执行鉴权调起支付。

  2. 鉴权调起支付:在微信后台进行鉴权,微信后台直接返回给前端支付的结果,前端收到返回数据后对支付结果进行展示。

  3. 推送支付结果:微信后台在给前端返回支付的结果后,也会向后台(商家后台)也返回一个支付结果,后台通过这个支付结果来更新订单的状态。

<a name="vIPE7"></a>

3.微信公众号-微信支付-面试题回答

公众号接入支付: https://pay.weixin.qq.com/static/applyment_guide/applyment_detail_public.shtml

  1. 获取商户号:首先,您需要注册一个微信商户号。您可以通过微信支付的官方网页申请一个商户号。

  2. 开通微信支付:申请商户号后,您需要完成微信支付的开通流程。具体步骤可以通过微信支付的官方文档找到。

  3. 配置支付参数:在接入微信支付前,您需要根据官方文档的要求配置支付参数,包括公众号的AppID、商户号、API密钥等。

  4. 用户在公众号的页面上下单,携带下单信息和token调用商家后台的下单接口,

  5. 商家后台从token中解析出openid, 生成订单信息,并存入数据库。之后商家后台携带请求参数调用微信的支付接口,并返回预支付id

请求参数如下:

{
    "mchid": "1900006XXX",  // 商户号
    "out_trade_no": "1217752501201407033233368318",  //商家生成的订单号
    "appid": "wxdace645e0bc2cXXX",  //公众号appid
    "description": "Image形象店-深圳腾大-QQ公仔",   // 商家描述
    "notify_url": "https://www.weixin.qq.com/wxpay/pay.php",  //异步接收微信支付结果通知的回调地址
    "amount": {
        "total": 1,  // 订单总金额
        "currency": "CNY"  // 货币类型
    },
    "payer": {
        "openid": "o4GgauInH_RCEdvrrNGrntXDuXXX"  //用户的openid
    }
}

返回参数

{
    "prepay_id": "wx26112221580621e9b071c00d9e093b0000"
}
  1. 商家后台接收到返回的预支付id后,会生成调起支付需要的参数,传给前端

  2. 前端收到后台的支付参数后,调用JSAPI向微信调起支付,调起支付时需要携带后端给的参数

JSAPI和参数

// JSAPI
WeixinJSBridge.invoke('getBrandWCPayRequest', {
    "appId": "wx2421b1c4370ec43b",     //公众号ID,由商户传入     
    "timeStamp": "1395712654",     //时间戳,自1970年以来的秒数     
    "nonceStr": "e61463f8efa94090b1f366cccfbbb444",      //随机串     
    "package": "prepay_id=wx21201855730335ac86f8c43d1889123400",
    "signType": "RSA",     //微信签名方式:     
    "paySign": "oR9d8PuhnIc+YZ8cBHFCwfgpaK9gd7vaRvkYD7rthRAZ\/X+QBhcCYL21N7cHCTUxbQ+EAt6Uy+lwSN22f5YZvI45MLko8Pfso0jm46v5hqcVwrk6uddkGuT+Cdvu4WBqDzaDjnNa5UK3GfE1Wfl2gHxIIY5lLdUgWFts17D4WuolLLkiFZV+JSHMvH7eaLdT9N5GBovBwu5yYKUR7skR8Fu+LozcSqQixnlEZUfyE55feLOQTUYzLmR9pNtPbPsu6WVhbNHMS3Ss2+AehHvz+n64GDmXxbX++IOBvm2olHu3PsOUGRwhudhVf7UcGcunXt8cqNjKNqZLhLw4jq\/xDg==" //微信签名 
},

前端逻辑

// 调起支付的函数
function onBridgeReady() {
    WeixinJSBridge.invoke('getBrandWCPayRequest', {
        "appId": "wx2421b1c4370ec43b",     //公众号ID,由商户传入     
        "timeStamp": "1395712654",     //时间戳,自1970年以来的秒数     
        "nonceStr": "e61463f8efa94090b1f366cccfbbb444",      //随机串     
        "package": "prepay_id=wx21201855730335ac86f8c43d1889123400",
        "signType": "RSA",     //微信签名方式:     
        "paySign": "oR9d8PuhnIc+YZ8cBHFCwfgpaK9gd7vaRvkYD7rthRAZ\/X+QBhcCYL21N7cHCTUxbQ+EAt6Uy+lwSN22f5YZvI45MLko8Pfso0jm46v5hqcVwrk6uddkGuT+Cdvu4WBqDzaDjnNa5UK3GfE1Wfl2gHxIIY5lLdUgWFts17D4WuolLLkiFZV+JSHMvH7eaLdT9N5GBovBwu5yYKUR7skR8Fu+LozcSqQixnlEZUfyE55feLOQTUYzLmR9pNtPbPsu6WVhbNHMS3Ss2+AehHvz+n64GDmXxbX++IOBvm2olHu3PsOUGRwhudhVf7UcGcunXt8cqNjKNqZLhLw4jq\/xDg==" //微信签名 
    },
    function(res) {
        //查看支付状态
        if (res.err_msg == "get_brand_wcpay_request:ok") {
            // 使用以上方式判断前端返回,微信团队郑重提示:
            //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
        }
    });
}
​
​
// 判断当前环境是不是微信环境,如果是,直接调用。 如果不是,根据环境采用不同的事件绑定
if (typeof WeixinJSBridge == "undefined") {
    if (document.addEventListener) {
        document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
    } else if (document.attachEvent) {
        document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
        document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
    }
} else {
    onBridgeReady();
}

6.接下来的一系列操作都是由用户来操作的,包括了微信支付密码,指纹等验证,确认支付之后执行鉴权调起支付。<br />7.鉴权调起支付:在微信后台进行鉴权,微信后台直接返回给前端支付的结果,前端收到返回数据后对支付结果进行展示。<br />8.推送支付结果:微信后台在给前端返回支付的结果后,也会向后台(商家后台)也返回一个支付结果,后台通过这个支付结果来更新订单的状态。

get_brand_wcpay_request:ok  支付成功
get_brand_wcpay_request:cancel  支付过程中用户取消
get_brand_wcpay_request:fail    支付失败

<a name="l4Ukv"></a>

4.H5(webApp)调起支付

https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_3_4.shtml<br />商户后台系统先调用微信支付的H5下单接口,微信后台系统返回链接参数h5_url,用户使用微信外部的浏览器访问该h5_url地址调起微信支付中间页

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。