目次
WeChat ミニ プログラム アカウントを申請する
orderId
販売者プラットフォームで正しい支払いドメイン名を設定してください
デバッグはオンラインである必要があります。困っています。イントラネット侵入 (Ngrok またはピーナッツ シェル) を使用できます。
製品ページ
同时支持 H5 支付和 JSAPI 支付
注意事项
参考
总结
ホームページ WeChat アプレット ミニプログラム開発 フロントエンドの観点から WeChat の支払いプロセスを整理する

フロントエンドの観点から WeChat の支払いプロセスを整理する

Dec 09, 2020 pm 05:56 PM
ウィーチャットペイ

WeChat ミニ プログラム開発チュートリアル WeChat 支払いプロセスの整理

フロントエンドの観点から WeChat の支払いプロセスを整理する

##推奨: WeChatミニ プログラム プログラム開発チュートリアル

ビジネス ニーズにより、次の 3 つの支払い方法を含む WeChat 支払い機能が開発されています。

    JSAPI 支払い: WeChat Web ページ支払いが必要です。 WeChat アクティベーション サービス番号
  • ミニ プログラム支払い: ミニ プログラムで支払うには、ミニ プログラムを開く必要があります
  • H5 支払い: モバイル ブラウザの Web ページで支払います (WeChat イントラネットを終了します) )
WeChat 支払いを使用する前に、WeChat 販売アカウントを開設する必要があります。その支払い方法を使用するには、販売プラットフォームで開設する必要があります (審査の可能性があります)。

支払われたお金は最終的に販売アカウント (通常は会社の財務部門によって開設されます) に送られます。

WeChat Payの開発過程では、大小さまざまな落とし穴に遭遇しましたが、ようやく完成し、開発プロセスを整理することができました。

参考:

    WeChat 支払いアクセス ガイド
  • WeChat 支払い開発ドキュメント
ミニ プログラム支払い

開発プロセス

    アプレットは注文インターフェイスの作成を要求し、バックエンドは
  1. orderId を取得するために注文を出し、
  2. アプレットは wx を通じてそれを取得します。 .login () Get
  3. code
  4. アプレットは、この
  5. codeorderId を使用してバックエンド インターフェイスをリクエストし、支払いに必要なデータを取得します
  6. 支払いに必要なデータを取得した後、アプレットは wx.requestPayment() インターフェイスを呼び出し、支払いページを直接呼び出します。
  7. 支払いが成功したかどうかを判断するロジック
  8. # #疑似コード
  9. async function wxPay(goodId) {
      // 1. 创建订单 获取orderId
      let orderId = await ajax("POST", "/api/OrderProgram/CreateTheOrder", {
        goodId, // 商品id
      });
      // 2. 获得 code
      let code = await wxlogin(); // 基于pr封装的wx.login()方法
      // 3. 获取支付的数据
      let payData = await ajax("POST", "/api/OrderProgram/WxXcxPay", {
        orderId,
        code,
      });
      // 4. 发起支付
      let res = await payment(payData); // 基于pr封装的wx.requestPayment()方法
      // 5. 判断是否支付成功
      let payResult = res.errMsg;
      if (payResult == "requestPayment:ok") {
        console.log("支付成功");
      } else if (payResult == "requestPayment:fail cancel") {
        console.log("用户取消支付");
      } else {
        console.log("支付失败");
      }
    }
    ログイン後にコピー
注意事項

WeChat ミニ プログラム アカウントを申請する

申請が成功すると、AppID (ミニ プログラム ID) と AppSecret (ミニ プログラム キー) を取得できます。 )
    アプリケーション タイプはエンタープライズ タイプです。そうでない場合は WeChat Payment にアクセスできません

  1. WeChat ミニ プログラム認証
    認定に合格したミニ プログラムのみが WeChat Payment にアクセスし、販売者プラットフォームをバインドできます
  2. マーチャント プラットフォーム アカウントの申請
    最初のステップで申請する必要がある AppID
  3. 申請が成功すると、MchID (マーチャント ID) と MchKey (マーチャント キー) を取得できます。
  4. WeChat ミニ プログラムに関連付けられた販売者番号
    WeChat と販売者の両方が正常に認証されたら、WeChat バックグラウンドで WeChat 支払いメニューに接続します
  5. WeChat 支払いにアクセスします
  6. で接続しますWeChat バックグラウンドの WeChat 支払いメニュー
  7. H5 支払い
  8. 開発プロセス

フロントエンドは注文インターフェイスの作成を要求し、バックエンドは注文インターフェイスの作成を要求します。 -end は一律に注文を出し、

orderId

を取得し、
  1. を返します。フロントエンドは、orderId インターフェイスで支払いを要求し、
  2. mweb_url
  3. を取得します。 ## にジャンプし、mweb_url にジャンプすると、WeChat にジャンプし、自動的に WeChat 支払いを呼び出します。
  4. 支払い後、支払いページに戻って、支払うかどうかを決定します。 成功 (送信する必要があります)リクエストからバックエンド クエリへ)
  5. 4.1 ページを更新して、最新の支払い (注文) ステータスを取得します。 4.2 「支払い済み」ボタンを設定して、ユーザーがクリックしてステータスを自動的に確認できるようにします。
  6. 疑似コード
    async function wxH5Pay(goodId) {
      // 1. 创建订单 获取orderId
      let orderId = await ajax("POST", "/api/OrderProgram/CreateTheOrder", {
        goodId, // 商品id
      });
      // 2. 获取支付跳转的URL
      let mweb_url = await ajax("POST", "/api/OrderProgram/WxH5Pay", { orderId });
      // 3. 跳转URL去微信支付
      if (mweb_url) {
        location.href = mweb_url;
      } else {
        console.log("回调地址出错");
      }
      // 4. 支付后返回支付页,判断是否支付成功
      // 4.1 刷新页面,获取最新的订单(商品)状态。
      // 4.2 设置一个"我已支付"的按钮,让用户点击之后查询状态。
    }
    ログイン後にコピー

    注意事項

販売者プラットフォームで正しい支払いドメイン名を設定してください

デバッグはオンラインである必要があります。困っています。イントラネット侵入 (Ngrok またはピーナッツ シェル) を使用できます。

    必要な
  • redirect_url
  • urlencode
  • process
  • H5 支払いを行うことができませんWeChat 顧客に直接クライアント内にロードするには、外部ブラウザにロードしてください。 参考
  • WeChat 支払い - H5 支払い開発手順

JSAPI 支払い (WeChat 内の Web ページ支払い)
  • 開発プロセス

製品ページ

    フロントエンド製品ページで注文を作成し、
  • orderId
# を取得します。バックエンドで統合注文を行った後、##フロントエンドは
    orderId
  1. 支払いページ ## で支払いページにジャンプします。
  2. ##Get
code
初めてページに入り、
    code
  1. があるかどうかを確認しますパス内に code

    はなく、データ ジャンプを要求する サブ認可ページでは、コールバック アドレスを通じて
      code
    1. が一緒に返されます。 ##code をバックエンドに送信し、バックエンドで openid
    2. に解析され、適切に保持されます。
    3. [支払いの確認] ボタンをクリックして、
    4. wxPay()
    5. メソッドをトリガーします。 Send orderId
    6. post ターミナルに、
    wxData
  2. wxData に含まれる

    wx.config
    1. wx.chooseWXPay のデータを取得します。 。 最初に wx.config()
    2. を呼び出し、次に
    3. wx.chooseWXPay() を呼び出します。すべてが正常であれば、支払いページがポップアップ表示されます。 支払いステータスはバックエンドを通じてクエリされます
    4. 疑似コード製品ページ
    5. // 1. 创建订单 获取orderId
      let orderId = await ajax("POST", "/api/OrderProgram/CreateTheOrder", {
        goodId, // 商品id
      });
      // 2. 携带id 跳转到支付页
      this.$router.push({ name: "wx_pay_page", params: { orderId: id } });
      ログイン後にコピー
  3. エントリーファイル (
  4. main.js
  5. )

// main.js 引入 js-sdk
import wx from "weixin-js-sdk";
ログイン後にコピー

  • 決済ページ HTML
    <template>
      <p>
        <button @click="wxPay">点击支付</button>
      </p>
    </template>
    ログイン後にコピー
  • 支払いページ JS
  • // Vue
    data(){
        return {
            orderId: this.$route.params.orderId, // 订单id
            url: '',// 获取code的url
            wxData: null,// js-sdk接口所需的数据
        }
    },
    mounted(){
        // 判断是否有code
        this.getCode()
    }
    methods: {
        getCode() {
            var code = this.getUrlPram("code");
            if (code != null) {
                this.code = code;
                // 拿到 code 发给 后端
                this.sendCode(code);
            } else {
                // 去拿code
                this.getUrl();
            }
        },
        getUrl() {
            // 请求后端拿到url所需数据,然后跳转页面在通过回调地址返回,获取code.
            this.axios
                .post("/api/OrderProgram/GetOpenidAndAccessToken", {
                    orderId: this.orderId,
                })
                .then((data) => {
                    this.url = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${data.appId}&redirect_uri=${data.redirect_uri}&response_type=${data.response_type}&scope=${data.scope}&state=${data.state}`;
                    window.location.href = this.url;
                })
                .catch((err) => {
                    console.log(err);
                });
        },
        sendCode(code) {
            // 发送code给后端 后端解析出openid
            this.axios
                .post("/api/OrderProgram/GetOpenidAndAccessTokenFromCode", {
                    code: code,
                })
                .then((res) => {
                    console.log(res);
                })
                .catch((err) => {
                    console.log(err);
                });
        },
        wxPay: async function() {
            // 发送orderid,获取wx.chooseWXPay和wx.config所需的参数
            this.wxData = await this.axios.post(
                "/api/OrderProgram/WxJSAPIPay",
                { orderId: this.orderId }
            );
            let wxConfigData = this.wxData.wxConfigData // 获取wx.chooseWXPay()所需数据
            let wxPayData = this.wxData.wxPayData;// 获取wx.config()所需数据
            this.$wx.config({
                debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                appId: wxConfigData.appId, // 必填,公众号的唯一标识
                timestamp: wxConfigData.timeStamp, // 必填,生成签名的时间戳
                nonceStr: wxConfigData.nonceStr, // 必填,生成签名的随机串
                signature: wxConfigData.paySign, // 必填,签名
                jsApiList: [
                    "chooseWXPay",
                ],
            });
            // 执行支付
            this.$wx.chooseWXPay({
                timestamp: wxPayData.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
                nonceStr: wxPayData.nonceStr, // 支付签名随机串,不长于 32 位
                package: wxPayData.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
                signType: wxPayData.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
                paySign: wxPayData.paySign, // 支付签名
                success: (res) => {
                    this.$toast("支付成功");
                },
                fail: (err) => {
                    this.$toast("支付失败");
                },
            });
        },
    }
    ログイン後にコピー

    同时支持 H5 支付和 JSAPI 支付

    // 在创建订单之后,就判断环境使用哪种方法支付。
    if (isWx()) {
      this.WXPay(orderId); // 带着orderId跳转到支付页逻辑
    } else {
      this.H5Pay(orderId); // 执行上面H5支付中的创建订单之后的逻辑
    }
    // 判断是否是微信浏览器
    function isWx() {
      let uAgent = navigator.userAgent.toLowerCase();
      reutrn(/micromessenger/.test(uAgent)) ? true : false;
    }
    ログイン後にコピー

    注意事项

    • 开通微信商户号 - 设置支付目录(如果是 Vue 这类 SPA 页面,到根目录即可,也就是#号之前的地址)
    • 开通微信公众号(服务号) - 设置安全域名、设置授权域名
    • 收集参数:appId 和 AppSecret
    • 添加 Web 开发工具开发者(需要开发者同时开发者关注开发的微信公众号和微信公众账号安全助手)参考文档
      [图片上传失败...(image-b07878-1605777597831)]
    • 设置回调域名(例如:www.xx.com/pay,最后获取的 code 会拼在此回调地址后返回,返回后如www.xx.com/pay?code=xxxx
    • 获取 code

      • 参考获取 code 文档
      • 在微信客户端网页打开授权地址,跳转之后,在返回的回调地址之后拿到 code
    https://open.weixin.qq.com/connect/oauth2/authorize
    ?appid=你的appid
    &redirect_uri=你的回调地址(拿到code后返回)
    &response_type=code(返回类型,默认code)
    &scope=snsapi_base(授权范围,静默授权拿到openid)
    &state=STATE(自定义状态,非必填)
    #wechat_redirect(重定向使用必须携带)
    ログイン後にコピー

    redirect_uri参数要和你在微信公众号里设置的回调域名一致(例如:www.xx.com/pay),需要注意的是这 url 需要urlEncode

    请求这个地址之后,code 会以你设置的redirect_uri地址里的参数带回来,拿到之后传给后端就行了。

    • 前端引入 js-skd

      • 使用script引入js-sdk
      • 下载使用 npm 包weixin-js-sdk
    • 获取 wx.config 的参数
    • 获取 wx.chooseWXPay 所需的参数

    参考

    • 微信支付-JSAPI
    • 微信公众号-网页授权
    • JS-SDK 开发文档

    总结

    整个流程走下来,给我的体验是:小程序支付最方面(因为配置少),其次是 H5,JSAPI 支付最麻烦(文章一多半都在写它)

    在微信支付功能开发过程中,其实最麻烦的不是开发流程,而是他的各种配置和授权流程,为了拿到所需的参数而来回折腾。

    开发过程中的一些参数是经常用到的,如 appid、openid、orderId

    支付流程大径相同,先获取到用户的 openid,知道你是谁,然后统一下单拿到 orderId 再去处理不同平台的支付方式

    开发时候用到的相关文档,一定要仔细阅读二遍以上为止!!

    遇到问题不要死刚,多百度多 Google,说不准你遇到的问题已经有无数的人遇到过并且已经有成熟的解决方案了。

    前端和后端要多沟通,有什么问题(难点)随时反馈,需要什么参数好好说,遇到观点不一致的时候千万要注意控制住情绪,切莫撕逼(.——.)。

    因为本人水平有限,对后端流程懂得不多,只能以前端的角度来梳理整个支付流程。

    以上,希望对你有所帮助。

    以上がフロントエンドの観点から WeChat の支払いプロセスを整理するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    WeChat 支払いのパスワードを忘れた場合、どのように取得すればよいですか? WeChat 支払いのパスワードを忘れた場合、どのように取得すればよいですか? Feb 23, 2024 pm 09:40 PM

    WeChat では、ユーザーは支払いパスワードを入力して購入できますが、支払いパスワードを忘れた場合はどうすればよいでしょうか?ユーザーが支払いパスワードを忘れた場合は、[マイサービス] - [ウォレット] - [支払い設定] - に移動して支払いパスワードを回復する必要があります。決済パスワードを忘れた場合の確認方法については、具体的な操作方法を以下で詳しくご紹介しますので、ぜひご覧ください。 WeChat の使い方チュートリアル. WeChat の支払いパスワードを忘れた場合、どのように確認しますか? 回答: マイサービス - ウォレット - 支払い設定 - 支払いパスワードを忘れた場合 具体的な方法: 1. まず、[マイ] をクリックします。 2. 中のサービスをクリックします。 3. 内部のウォレットをクリックします。 4. 支払い設定を見つけます。 5. 「支払いパスワードを忘れた場合」をクリックします。 6. 確認のために自分の情報を入力します。 7. 次に、新しい支払いパスワードを入力して変更します。

    WeChat 支払いのパスワードを忘れた場合はどうすればよいですか? WeChat 支払いのパスワードを忘れた場合はどうすればよいですか? Jan 08, 2024 pm 05:02 PM

    WeChat 支払いパスワードを忘れた場合の解決策: 1. WeChat アプリを開き、右下隅の「I」をクリックしてパーソナル センター ページに入ります; 2. パーソナル センター ページで、「支払う」をクリックして支払いページに入ります; 3.支払いページで、右上隅の「...」をクリックして支払い管理ページに入ります; 4. 支払い管理ページで、「支払いパスワードを忘れた場合」を見つけてクリックします; 5. ページの指示に従って、個人情報を入力します。本人確認が完了すると、「顔をスワイプして取得する」または「キャッシュカード情報を認証して取得する」方法からパスワードなどを取得することができます。

    Meituan Takeout の WeChat 支払いの設定方法 WeChat 支払いの設定方法 Meituan Takeout の WeChat 支払いの設定方法 WeChat 支払いの設定方法 Mar 12, 2024 pm 10:34 PM

    Meituan テイクアウト アプリには多くの食品や軽食の店があり、すべての携帯電話ユーザーは自分のアカウントを通じてログインします。個人の配達先住所と連絡先番号を追加して、最も便利なテイクアウト サービスをお楽しみください。ソフトウェアのホームページを開き、製品キーワードを入力し、オンラインで検索すると、対応する製品の結果が表示されます。上下にスワイプするだけで購入して注文できます。また、プラットフォームは、配達先住所に基づいて、レビューの高い近くの数十のレストランを推奨しますユーザーが提供する. ストアはさまざまな支払い方法も設定できます. ワンクリックで注文を完了できます. ライダーはすぐに配達を手配でき、配達速度は非常に速いです. テイクアウト用の赤い封筒もあります. Meituan のテイクアウト ユーザー向けにエディターがオンラインで詳細に表示され、WeChat 支払いの設定方法を説明します。 1. 製品を選択した後、注文を送信し、[今すぐ] をクリックします。

    WeChat決済の引き落とし順序を設定する方法 WeChat決済の引き落とし順序を設定する方法 Sep 06, 2023 am 11:11 AM

    WeChat 支払いの控除順序を設定する手順: 1. WeChat APP を開き、「Me」インターフェースをクリックし、「サービス」をクリックして、「収集と支払い」をクリックします。 2. 「優先使用」をクリックします。回収および支払いインターフェイスの支払いコードの下にある「支払い方法」; 3. 必要な支払い方法を選択します。

    Xianyu は WeChat で支払うことができますか? WeChat 支払い方法に変更するにはどうすればよいですか? Xianyu は WeChat で支払うことができますか? WeChat 支払い方法に変更するにはどうすればよいですか? Mar 12, 2024 pm 12:19 PM

    誰もが何もすることがないとき、Xianyuプラットフォームを閲覧することを選択します.このプラットフォームには多数の製品があることがわかり、誰もがさまざまな中古製品を見ることができます.これらの製品は中古品ですが、商品の品質には全く問題はございませんので、どなたでも安心してご購入いただけますし、価格も非常にお手頃でありながら、どなたでも気軽に商品を手に取ることができます。コミュニケーションをとり、価格交渉を行います。全員が適切に交渉している限り、取引を行うことを選択できます。ここで全員が支払いをするときに、WeChat 支払いをしたいのですが、プラットフォームでは許可されていないようです。編集者をフォローしてください。具体的にどのような状況なのかを知るためです。項羽

    WeChat Pay には銀行カードをバインドする必要がありますか? WeChat Pay には銀行カードをバインドする必要がありますか? Nov 17, 2022 am 11:57 AM

    WeChat Pay は銀行カードにバインドする必要はありません。 WeChatペイメントは、実名認証が行われることを条件に、銀行カードを拘束せずに利用でき、実名認証さえ通れば、WeChat両替を利用して紅包の送付、送金、集金、WeChatペイメント、他の操作。なお、WeChatは銀行カードに紐づけられていない場合は現金を引き出すことができず、受け取り、支払い、送金などに制限があり、1回の取引と1日あたりの限度額は200元まで、最大で200元までとなっている。月額500元。

    WeChat Pay で返金を申請する手順を共有する WeChat Pay で返金を申請する手順を共有する Mar 25, 2024 pm 06:31 PM

    1. まず、携帯電話で WeChat アプリを開き、クリックして WeChat アカウントにログインし、WeChat ホームページに入ります。 2. WeChat ホームページの右下隅にある [自分] ボタンをクリックし、[支払い] オプションを選択して、支払いページに入ります。 3. [Payment] ページに入ったら、[Wallet] オプションをクリックして入り、[Wallet] ページの右上隅にある [Bill] をクリックします。

    Alibaba で WeChat で支払う方法_Alibaba で WeChat で支払う方法 1688 Alibaba で WeChat で支払う方法_Alibaba で WeChat で支払う方法 1688 Mar 20, 2024 pm 05:51 PM

    Alibaba 1688 は仕入れと卸売りのサイトで、商品の価格はタオバオよりもはるかに安いです。では、アリババはどのようにして WeChat 決済を利用しているのでしょうか?編集者は、あなたと共有するためにいくつかの関連コンテンツをまとめました。必要としている友人は、見に来てください。アリババはどのように WeChat 決済を使用していますか? 回答: 当面の間、WeChat 決済はご利用いただけません; 1. 商品を購入するページで [支払い方法の変更] をクリックします。 2. ポップアップ ページで [支払い方法の変更] をクリックするだけです。 [Alipay、段階的支払い]、レジ係] を選択できます。

    See all articles