検索
ホームページバックエンド開発PHPチュートリアルPHPでWeChat決済インターフェース開発プログラムを書く方法

WeChat 支払いインターフェイスは現在、徐々に Alipay のようになりつつあり、API インターフェイスを使用して支払い用のサードパーティ Web サイトやアプリケーションを実装できます。以下は php WeChat 支払いインターフェイス開発プログラムであり、興味のある友人は参照してください。 .

php WeChat決済インターフェース開発プログラム説明:

必要条件:
appid //公式アカウントバックエンドデベロッパーセンターから取得(メール内と同じ)

mchid//メール内で取得

key// 販売者のバックエンドは独自に設定されます

appsecret // 公式アカウント開発者センターは
2 つの証明書ファイルを取得し、apiclient_cert.pem と apiclient_key.pem はメールで取得されます
注:
WeChat での支払い公式アカウント バックエンド -》開発構成 -》新しいテスト ディレクトリとテスト個人 WeChat アカウント。
開発者センター - 》基本的なユーザー情報を取得するための Web ページの認証 - 》テスト ドメイン名に変更します。そうしないと、redirect_uri パラメーター エラーが発生します
——————————今後改善予定——————-
WeChat の支払い準備完了ページは、バックグラウンドで 3 つの操作を独自に実行していました:

1. openid を取得します

//使用jsapi接口
 
 代码如下复制代码
  $jsApi = new JsApi_pub();
 
  //=========步骤1:网页授权获取用户openid============
  //通过code获得openid
  if (!isset($_GET['code']))
  {
    //触发微信返回code码
    $url = $jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);
    //echo $url;
    Header("Location: $url");
  }else
  {
    //获取code码,以获取openid
    $code = $_GET['code'];
    $jsApi->setCode($code);
    $openid = $jsApi->getOpenid();
  }

また、最初に開始したときに、openid を取得できないという問題が発生しました。このデモでは、取得するためにcurlを使用していました。
サーバーのカールが取得できないのは奇妙です。その後、file_get_contentsに変更され、正常に取得できるようになりました。
しかし、これは解決策ではありません。後でさらにカール操作が必要になるためです。
開発ドキュメントの中に、証明書の操作には libcurl 7.20.1 以降が必要であると書かれている箇所を見つけて、Linux の phpcurl バージョンを改善するためにサーバーに取り組んできました。結局、別の Windows サーバーに切り替えました。
当面はこれを実行して、次回使用する必要があるときにデバッグしましょう。

2番目のステップ: 注文番号IDを取得して支払います
コードは次のとおりです

$unifiedOrder = new UnifiedOrder_pub();
   
  //var_dump($unifiedOrder);
  //设置统一支付接口参数
  //设置必填参数
  //appid已填,商户无需重复填写
  //mch_id已填,商户无需重复填写
  //noncestr已填,商户无需重复填写
  //spbill_create_ip已填,商户无需重复填写
  //sign已填,商户无需重复填写
  $unifiedOrder->setParameter("openid","$openid");//商品描述
  $unifiedOrder->setParameter("body","贡献一分钱");//商品描述
  //自定义订单号,此处仅作举例
  $timeStamp = time();
  $out_trade_no = WxPayConf_pub::APPID."$timeStamp";
  $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号 
  $unifiedOrder->setParameter("total_fee","1");//总金额
  $unifiedOrder->setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址 
  $unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
  //非必填参数,商户可根据实际情况选填
  //$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商户号 
  //$unifiedOrder->setParameter("device_info","XXXX");//设备号 
  //$unifiedOrder->setParameter("attach","XXXX");//附加数据 
  //$unifiedOrder->setParameter("time_start","XXXX");//交易起始时间
  //$unifiedOrder->setParameter("time_expire","XXXX");//交易结束时间 
  //$unifiedOrder->setParameter("goods_tag","XXXX");//商品标记 
  //$unifiedOrder->setParameter("openid","XXXX");//用户标识
  //$unifiedOrder->setParameter("product_id","XXXX");//商品ID
 
 
  $prepay_id = $unifiedOrder->getPrepayId();
   
  //echo 'prepay_id:';
  var_dump($prepay_id);

このステップでも多くの問題が発生しました。
まず、WeChat決済のテストは難しく、WeChat内でしかテストできません。携帯電話を使ってスワイプするだけです。
第二に、デバッグに var_dump を使用するのは簡単ではありません。一部のファイルを XML 形式で印刷すると、文字の長さのみが表示され、内容は表示されません。そこで、サーバー上のデバッグ用にログの形式で書き込みました。 ログのコードは次のとおりです

// 打印log
  function log_d($word) 
  {
    $log_name="./logd.log";//log文件路径
    $fp = fopen($log_name,"a");
    flock($fp, LOCK_EX) ;
    fwrite($fp,"执行日期:".strftime("%Y-%m-%d-%H:%M:%S",time())."n".$word."nn");
    flock($fp, LOCK_UN);
    fclose($fp);
  }

WxPayPubHelper.php で呼び出します。デモで。

最初は、与えられた mchid と appid が一致しなかったため、エラーが発生し続けました。 。彼らは私に間違った口座番号を教えてくれました。最初はランダムに試す方法がわかりませんでした。デバッグのこのステップでは、getPrepayId() の var_dump($this->result); でエラー コードを確認できます。

ステップ 3: 支払いフロントエンド JS コードを生成し、Web ページに配置します: コードは次のとおりです

$jsApi->setPrepayId($prepay_id);
 
$jsApiParameters = $jsApi->getParameters();

————————-クリックして移動お支払いへ————————-

この部分で別の問題が発生しました:


androidは「System: Access_denied」を返し、iosは「access_control:not_allowed」を返します
Baiduでたくさん検索しました。実は、私はこのことを長い間見てきましたが、まったく気づきませんでした。
認可リクエストを開始するページは認可ディレクトリに存在する必要があり、サブディレクトリに存在することはできません。それ以外の場合はエラーが返されます
支払いファイルは/ドメイン名/pay/demo/に配置しました
最初は/ドメイン名/pay/の最後まで行って、それで十分だと思っていました。サブディレクトリをサポートしても、結果は不可能です。 。
————————最後に下の写真を見てください————

wxpay1wxpay3
wxpay2

——————xmljs が進行中————————

へ注文 ID を生成して支払います:
コードは次のとおりです

<xml>
 <openid><![CDATA[ou9dHt0L8qFLI1foP-kj5x1mDWsM]]></openid>
 <body><![CDATA[贡献一下]]></body>
 <out_trade_no><![CDATA[wx88888888888888881414411779]]></out_trade_no>
 <total_fee>1</total_fee>
 <notify_url><![CDATA[http://shanmao.me/wxpay/notify_url.php]]></notify_url>
 <trade_type><![CDATA[JSAPI]]></trade_type>
 <appid><![CDATA[wx8888888888888888]]></appid>
 <mch_id>10012345</mch_id>
 <spbill_create_ip><![CDATA[61.50.221.43]]></spbill_create_ip>
 <nonce_str><![CDATA[60uf9sh6nmppr9azveb2bn7arhy79izk]]></nonce_str>
 <sign><![CDATA[2D8A96553672D56BB2908CE4B0A23D0F]]></sign>
</xml>

送信後、正しい戻り値が返されます。これには、perpay_id:

<xml>
 <return_code><![CDATA[SUCCESS]]></return_code> 
 <return_msg><![CDATA[OK]]></return_msg> 
 <appid><![CDATA[wx8888888888888888]]></appid> 
 <mch_id><![CDATA[10012345]]></mch_id> 
 <nonce_str><![CDATA[Be8YX7gjCdtCT7cr]]></nonce_str> 
 <sign><![CDATA[885B6D84635AE6C020EF753A00C8EEDB]]></sign> 
 <result_code><![CDATA[SUCCESS]]></result_code> 
 <prepay_id><![CDATA[wx201410272009395522657a690389285100]]></prepay_id> 
 <trade_type><![CDATA[JSAPI]]></trade_type> 
</xml>

支払いを生成するための JS:


JS が含まれます

支払いが成功した後、返品通知 xml:

{
  "appId": "wx8888888888888888",
  "timeStamp": "1414411784",
  "nonceStr": "gbwr71b5no6q6ne18c8up1u7l7he2y75",
  "package": "prepay_id=wx201410272009395522657a690389285100",
  "signType": "MD5",
  "paySign": "9C6747193720F851EB876299D59F6C7D"
}

概要: 上記がこの記事の全内容です。皆様の学習に役立つことを願っています。

関連する推奨事項:

php簡単な年齢計算方法

phpカスタマイズされた時間変換機能

phpインターフェース技術の例と詳細なグラフィック説明

以上がPHPでWeChat決済インターフェース開発プログラムを書く方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
絶対的なセッションタイムアウトとアイドルセッションのタイムアウトの違いは何ですか?絶対的なセッションタイムアウトとアイドルセッションのタイムアウトの違いは何ですか?May 03, 2025 am 12:21 AM

絶対セッションのタイムアウトはセッションの作成時に開始され、アイドルセッションタイムアウトはユーザーの操作なしに開始されます。絶対セッションタイムアウトは、金融アプリケーションなど、セッションライフサイクルの厳格な制御が必要なシナリオに適しています。アイドルセッションタイムアウトは、ソーシャルメディアなど、ユーザーが長い間セッションをアクティブに保つことを望んでいるアプリケーションに適しています。

セッションがサーバーで機能していない場合、どのような措置を講じますか?セッションがサーバーで機能していない場合、どのような措置を講じますか?May 03, 2025 am 12:19 AM

サーバーセッションの障害は、手順に従って解決できます。1。セッションが正しく設定されていることを確認するために、サーバーの構成を確認します。 2.クライアントCookieを確認し、ブラウザがそれをサポートしていることを確認し、正しく送信します。 3. Redisなどのセッションストレージサービスを確認して、それらが正常に動作していることを確認します。 4.アプリケーションコードを確認して、正しいセッションロジックを確認します。これらの手順を通じて、会話の問題を効果的に診断および修復し、ユーザーエクスペリエンスを改善することができます。

session_start()関数の重要性は何ですか?session_start()関数の重要性は何ですか?May 03, 2025 am 12:18 AM

session_start()iscrucialinphpformangingusersions.1)itInitiateSanewsessionifnoneExists、2)resumesanexistingsession、および3)SetSessionCookieforcontinuityAcrossRequests、ApplicationslicationSliviseSlikeUserauthicationAnticatent。

セッションクッキーにHTTPonlyフラグを設定することの重要性は何ですか?セッションクッキーにHTTPonlyフラグを設定することの重要性は何ですか?May 03, 2025 am 12:10 AM

HTTPonlyフラグを設定することは、XSS攻撃を効果的に防止し、ユーザーセッション情報を保護することができるため、セッションCookieにとって重要です。具体的には、1)HTTPONLYフラグは、JavaScriptがCookieにアクセスするのを防ぎます。2)Flagは、PHPとFlaskのSetCookiesとMake_Responseを介して設定できます。

PHPセッションはWeb開発でどのような問題を解決しますか?PHPセッションはWeb開発でどのような問題を解決しますか?May 03, 2025 am 12:02 AM

phpsessionssolvetheprobrof of maintainsea crossmultiplehttprequestsbyStoringdataontaonsociatingitiTauniquesessionid.1)それらは、通常はヨーロッパの側面、および一般的には、測定されている

どのデータをPHPセッションに保存できますか?どのデータをPHPセッションに保存できますか?May 02, 2025 am 12:17 AM

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

どのようにPHPセッションを開始しますか?どのようにPHPセッションを開始しますか?May 02, 2025 am 12:16 AM

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?May 02, 2025 am 12:15 AM

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

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

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター