ホームページ WeChat アプレット ミニプログラム開発 PHP: WeChat ミニ プログラム WeChat 決済サーバーの統合例 詳細な説明

PHP: WeChat ミニ プログラム WeChat 決済サーバーの統合例 詳細な説明

Jan 10, 2017 am 09:49 AM

WeChat ミニ プログラム WeChat 支払いサーバー セット

ミニ プログラム js にはネットワークにアクセスする機能があるため、理論的には、WeChat 支払いの統合作業はすべてミニ プログラム側で完了できますが、セキュリティのために機密キーが使用されないため、公開されておらず、公式プロバイダーを使用できます。既製の php デモはより省力化されているため、署名とリクエストはサーバー側で完了し、アプレットは wx.requestPayment(OBJECT) インターフェイスにのみ接続します。

全体的な統合プロセスは、最初に統一された方法で注文を出し、次に返された結果を使用して支払いを要求します。

全部で 3 つのステップがあります:

1. ミニ プログラムは、wx.login によって返されたコードを openid と交換します 2. サーバーは WeChat に注文を出します 3. ミニ プログラムは支払いを開始します

事前に次のものを準備します。

APPID = 'wx426b3015555a46be';
MCHID = '1900009851';
KEY = '8934e7d15453e97507ef794cf7b0519d';
APPSECRET = '7813490da6f1265e4901ffb80afaa36f';
ログイン後にコピー

PHP SDK、ダウンロードリンクは記事の最後にあります

1 番目と 4 番目のサンプルはミニ プログラムの申請時に取得され、2 番目と 3 番目のサンプルは WeChat ペイメントの開設を申請するときに取得されます。 3 番目と 4 番目のサンプルは比較的似ているため、これら 2 つを混同すると署名が失敗します。

WeChat で注文し、prepay_id を取得します

1. コントローラーを作成し、WxPay.Api.php クラスをインポートします

<?php
require_once __DIR__ . &#39;/BaseController.php&#39;;
require_once __DIR__ . &#39;/../third_party/wxpay/WxPay.Api.php&#39;;
 
class WXPay extends BaseController {
  function index() {
  }
}
ログイン後にコピー

その後、index.php/wxpay

2 を変更してアクセス要求を行うことができます。設定ファイルWxPay.Config.php

対応するキーを自分で適用するように変更します

3.インデックスメソッドを実装します

function index() {
//     初始化值对象
    $input = new WxPayUnifiedOrder();
//     文档提及的参数规范:商家名称-销售商品类目
    $input->SetBody("灵动商城-手机");
//     订单号应该是由小程序端传给服务端的,在用户下单时即生成,demo中取值是一个生成的时间戳
    $input->SetOut_trade_no(&#39;123123123&#39;);
//     费用应该是由小程序端传给服务端的,在用户下单时告知服务端应付金额,demo中取值是1,即1分钱
    $input->SetTotal_fee("1");
    $input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");
    $input->SetTrade_type("JSAPI");
//     由小程序端传给服务端
    $input->SetOpenid($this->input->post(&#39;openId&#39;));
//     向微信统一下单,并返回order,它是一个array数组
    $order = WxPayApi::unifiedOrder($input);
//     json化返回给小程序端
    header("Content-Type: application/json");
    echo json_encode($order);
  }
ログイン後にコピー

注1: ドキュメント内で言及されているnonce_strは送信されていませんが、SDKがそれを埋めますin for us

ソース WxPay.Api.php 55 行目

$inputObj->SetNonce_str(self::getNonceStr());//随机字符串
ログイン後にコピー

説明 2: サインも setSign に与えられています。ソースは WxPay.Data.php 111 行目、MakeSign() にあります

/**
  * 生成签名
  * @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值
  */
 public function MakeSign()
 {
   //签名步骤一:按字典序排序参数
   ksort($this->values);
   $string = $this->ToUrlParams();
   //签名步骤二:在string后加入KEY
   $string = $string . "&key=".WxPayConfig::KEY;
   //签名步骤三:MD5加密
   $string = md5($string);
   //签名步骤四:所有字符转为大写
   $result = strtoupper($string);
   return $result;
 }
ログイン後にコピー

4. ミニ プログラム ログイン インターフェイスを呼び出して openid を取得します

WeChat へのログイン要求を取得し、コードを取得して、openId と引き換えにコードを送信します

wx.login({
     success: function(res) {
      if (res.code) {
       //发起网络请求
       wx.request({
        url: &#39;https://api.weixin.qq.com/sns/jscode2session?appid=wx9114b997bd86f***&secret=d27551c7803cf16015e536b192******&js_code=&#39;+res.code+&#39;&grant_type=authorization_code&#39;,
        data: {
         code: res.code
        },
        success: function (response) {
          console.log(response);
        }
       })
      } else {
       console.log(&#39;获取用户登录态失败!&#39; + res.errMsg)
      }
     }
    });
ログイン後にコピー

コンソールから、 openid の取得に成功したので、あとはそれをサービスに転送するだけです。 サーバー側をクリックするだけで、サーバー側の $this->input->post('openId') が収集を待っています。

5. ミニプログラムは、統合注文を行うために https://lendoo.leanapp.cn/index.php/WXPay へのリクエストを開始します

//统一下单接口对接
      wx.request({
        url: &#39;https://lendoo.leanapp.cn/index.php/WXPay&#39;,
        data: {
          openId: openId
        },
        success: function (response) {
          console.log(response);
 
        },
            header: {
        &#39;content-type&#39;: &#39;application/x-www-form-urlencoded&#39;
    },
      });
ログイン後にコピー

以下の結果が得られます

{
 "appid": "wx9114b997bd86f8ed",
 "mch_id": "1414142302",
 "nonce_str": "eEICgYFuGqxFRK6f",
 "prepay_id": "wx201701022235141fc713b8f80137935406",
 "result_code": "SUCCESS",
 "return_code": "SUCCESS",
 "return_msg": "OK",
 "sign": "63E60C8CD90394FB50E612D085F5362C",
 "trade_type": "JSAPI"
}
ログイン後にコピー

前提は https です://lendoo .leanapp.cn はすでにホワイトリストに含まれています:

6. アプレットはシミュレーターテストのために支払い API

// 发起支付
var appId = response.data.appid;
var timeStamp = (Date.parse(new Date()) / 1000).toString();
var pkg = &#39;prepay_id=&#39; + response.data.prepay_id;
var nonceStr = response.data.nonce_str;
var paySign = md5.hex_md5(&#39;appId=&#39;+appId+&#39;&nonceStr=&#39;+nonceStr+&#39;&package=&#39;+pkg+&#39;&signType=MD5&timeStamp=&#39;+timeStamp+"&key=d27551c7803cf16***e536b192d5d03b").toUpperCase();
console.log(paySign);
console.log(appId);
wx.requestPayment({
  &#39;timeStamp&#39;: timeStamp,
  &#39;nonceStr&#39;: nonceStr,
  &#39;package&#39;: pkg,
  &#39;signType&#39;: &#39;MD5&#39;,
  &#39;paySign&#39;: paySign,
  &#39;success&#39;:function(res){
    console.log(&#39;success&#39;);
    console.log(res);
  }
});
ログイン後にコピー

を呼び出し、スキャン用の QR コードがポップアップ表示されます

結果はエラーです:

errMsg:"requestPayment:fail"
err_code:2
err_desc:"支付验证签名失败"
ログイン後にコピー

キーを署名に追加する必要があります! ! ! 'appId='+appId+'&nonceStr='+nonceStr+'&package='+pkg+'&signType=MD5&timeStamp='+timeStamp+"&key=d27551c7803cf16*e536b192d5d03b"これで完了です。

しかし、文書にはキーについての言及はありません

支払いが成功したスクリーンショット

PHP:微信小程序 微信支付服务端集成实例详解及源码下载

PHPの詳細については、WeChatアプレット、WeChat支払いサーバー統合例の詳細な説明、およびソースコードのダウンロードをご覧ください。PHPに注目してください。関連記事の中国語サイト!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)