<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>Chen Chen</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <icon>https://proi.cc/images/links/mc.ico</icon>
  <id>https://proi.cc/</id>
  <link href="https://proi.cc/" rel="alternate"/>
  <link href="https://proi.cc/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, Chen Chen</rights>
  <subtitle>你的大脑会带着偏见讲述人生，因此你要亲自记录。</subtitle>
  <title>Morning Chen</title>
  <updated>2026-08-09T12:00:00.000Z</updated>
  <entry>
    <author>
      <name>Chen Chen</name>
    </author>
    <category term="生活" scheme="https://proi.cc/categories/%E7%94%9F%E6%B4%BB/"/>
    <category term="随笔" scheme="https://proi.cc/tags/%E9%9A%8F%E7%AC%94/"/>
    <category term="年中复盘" scheme="https://proi.cc/tags/%E5%B9%B4%E4%B8%AD%E5%A4%8D%E7%9B%98/"/>
    <content>
      <![CDATA[<h2 id="半年之后，再看年初的愿望"><a href="#半年之后，再看年初的愿望" class="headerlink" title="半年之后，再看年初的愿望"></a>半年之后，再看年初的愿望</h2><p>翻了一下博客，上一篇文章停在1月26日，距离现在已经半年多了。年初写《你好，2026！》的时候，我还很认真地给这一年留下了三个关键词：健康、沉淀、专注。</p><p>当时还特意写了一句：“没有宏大的叙事和目标，没有长长的待办清单，只有继续要坚持的事情。”现在回头看，目标确实不算宏大，但也没有因为它们比较小，就自动完成🙂。</p><span id="more"></span><h2 id="健康：断断续续"><a href="#健康：断断续续" class="headerlink" title="健康：断断续续"></a>健康：断断续续</h2><p>健康只能算断断续续。跑步、羽毛球和骑行，基本保持了每周1～2次，暑假开始频率有所提高，每周能有4次以上了，清晨是一段无人打扰的时光，早起运动是一个很好的选择。当然，睡眠还是老问题，很少能够在晚上十点半上床，11点前入睡更是屈指可数，这一点通过每天的刻意练习来养成习惯，其实也没这么多重要的事情。</p><p><img src="/images/2026-half-snow-ridge.jpg" alt="雪山、松林和蓝天"></p><h2 id="沉淀：输入很多，留下太少"><a href="#沉淀：输入很多，留下太少" class="headerlink" title="沉淀：输入很多，留下太少"></a>沉淀：输入很多，留下太少</h2><p>这一项就比较打脸了。书读了一些，各种AI工具也没少折腾，还用Gemini做了一个潮汐演示。每天看起来都在接触新东西，收藏夹和聊天记录也越来越长，但博客非常诚实地停在了1月。</p><p>以前总觉得要等想法完整一点、有一块不被打扰的时间，再坐下来好好写。结果通常是时间没有等到，刚冒出来的想法也不知道跑去了哪里。大概写东西和运动差不多，不能每次都等状态完美，先写下来再说。</p><h2 id="专注：仍然在练习"><a href="#专注：仍然在练习" class="headerlink" title="专注：仍然在练习"></a>专注：仍然在练习</h2><p>专注是最难评价的一项。会议、消息和临时事务，还是会把一天切成很多小块。有时候从早忙到晚，回头想想好像什么都做了，又好像最重要的那件事没有动。计划总是赶不上变化，变化又通常伴随着一条新的微信消息。</p><p>现在还是会每天留一点时间做计划，尽量划出一段完整时间，只处理一件事情。效果有，但不稳定。好在慢慢明白了，不是每件事都需要马上回应，也不是每件事都值得占用自己的注意力。</p><p>下半年就不再增加新目标了，还是这三件事：继续运动，恢复写作，给自己留一点完整的时间。能做到多少，年底再来看。希望到时候翻开博客，停留的不是今天这一篇。</p>]]>
    </content>
    <id>https://proi.cc/2026/08/09/2026_half_year_review.html</id>
    <link href="https://proi.cc/2026/08/09/2026_half_year_review.html"/>
    <published>2026-08-09T12:00:00.000Z</published>
    <summary>重新翻开年初写下的健康、沉淀和专注，看看哪些已经进入生活，哪些还停留在文字里。</summary>
    <title>2026过半：健康、沉淀、专注，我做到了多少？</title>
    <updated>2026-08-09T12:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Chen Chen</name>
    </author>
    <category term="生活" scheme="https://proi.cc/categories/%E7%94%9F%E6%B4%BB/"/>
    <content>
      <![CDATA[<p>2026年的头一个月，最火的话题是什么？是Clawdbot，是Claude Code，是Kimi、Manus、MiniMax 、Qwen、GLM，是seedance、可灵、Veo、Nano Banana。</p><p>仿佛一转眼，我们的生活就被AI覆盖了，所有人都在谈论AI，父母的朋友圈里开始转发各种“AI要取代人类了”、“这些职业要消失了”、“你还不会AI吗”。但不能否认的是，断崖式的技术变革就这样来了，从对话框跃进到了智能体。</p><blockquote><p><em>“有时候，几十年过去，什么也没发生；有时候，几天过去，几十年就发生了。”</em></p></blockquote><p>刚好在看《第一性原理》时，翻到了潮汐的章节，觉得寥寥几张图片并不能很形象的解释这个现象，突发奇想把这个任务丢给了Gemini：生成一个潮汐演示的讲解动画，兼容PC和手机，清晰的表示涨潮和落潮，以及各天体的位置。于是，就有了下面这个网站：</p><p><a href="https://proi.cc/tide.html" target="_blank">潮汐演示 https://proi.cc/tide.html</a></p><p>说实话，看到效果的时候还是很震撼的，大概30多秒的时间，整个完成度已经相当高了，只对颜色和兼容性又做了微调，对于一些教学演示来说，已经相当可以了。</p><p>另外这条内容的题图，也是用nanobanan生成的。</p>]]>
    </content>
    <id>https://proi.cc/2026/01/26/gemini_tide.html</id>
    <link href="https://proi.cc/2026/01/26/gemini_tide.html"/>
    <published>2026-01-25T16:00:01.000Z</published>
    <summary>
      <![CDATA[<p>2026年的头一个月，最火的话题是什么？是Clawdbot，是Claude Code，是Kimi、Manus、MiniMax 、Qwen、GLM，是seedance、可灵、Veo、Nano Banana。</p>
<p>仿佛一转眼，我们的生活就被AI覆盖了，所有人都在谈论A]]>
    </summary>
    <title>用Gemini做了一个潮汐演示动画</title>
    <updated>2026-01-25T16:00:02.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Chen Chen</name>
    </author>
    <content>
      <![CDATA[<p>挺快的，一年又过完了，又到了生日这一天。</p><p>生日和元旦临近有一个好处，刚写完对新一年的誓愿，又可以开始期许对自己新一岁的展望。特别是当我整理出原来的文章，发现每一篇之间以年为计量单位的间隔，至少“写作”这个愿望，一直没有持续的实现。在今天，也就是想到哪里写到哪里，一些在生日这天的碎碎念，或者说是岁岁念。</p><h2 id="真正值得我关心的人很少。"><a href="#真正值得我关心的人很少。" class="headerlink" title="真正值得我关心的人很少。"></a>真正值得我关心的人很少。</h2><p>这个世界上真正值得我关心，和关心我的人很少。我们总是对陌生人太过友善和重视，对熟悉的朋友太过苛刻。总是花了很多时间面对陌生人和工作，却忽视了最重要的人和事。世界少了谁都能继续转，就算是一个巨大的草台班子，所以去分辨那些真正重要和需要我的人和事。</p><h2 id="不要被一万小时吓到，从每日的坚持的开始。"><a href="#不要被一万小时吓到，从每日的坚持的开始。" class="headerlink" title="不要被一万小时吓到，从每日的坚持的开始。"></a>不要被一万小时吓到，从每日的坚持的开始。</h2><p>《刻意练习》火起来的时候，大家都盯着一万小时定律，一万小时差不多416天，每天8小时的话就是1200多天，很多人就会被这个时间吓到。但其实我们不用太关注一万小时这个数字，从每日的坚持开始，比如运动，每天下班后运动一小时，然后继续加班，持续一个月，就会开始养成一个习惯，成为一个自然而然的事情，很多东西都是微小习惯的叠加，从一点点小坚持开始。</p><h2 id="学会“心流”，为自己赢得更多的时间和空间。"><a href="#学会“心流”，为自己赢得更多的时间和空间。" class="headerlink" title="学会“心流”，为自己赢得更多的时间和空间。"></a>学会“心流”，为自己赢得更多的时间和空间。</h2><p>在跟Gemini聊天的时候，学到了一个新词——“<strong>心流(Flow)</strong>”：一种“完全沉浸在某项活动中，甚至忘记了时间流逝和自我存在”的最佳心理状态。回想日常工作中，我确实很难进入这个状态，随时都会被其他事务打断，大脑就处在一个随时分片切换的状态，非常的低效。所以我开始尝试每天留出30分钟，规划当日的工作安排和重要性，划分完整的时间来处理事务，为自己赢得很多的时间和空间。</p><h2 id="持续的学习和认知升级。"><a href="#持续的学习和认知升级。" class="headerlink" title="持续的学习和认知升级。"></a>持续的学习和认知升级。</h2><p>AI和阅读。阅读依旧是不可或缺的技能和习惯，加入了野山书店双月计划，在短视频“快餐”时代，让大脑放松下来。AI是当前非常好的个人助理，无论是Gemini还是元宝，智能体、会议录音转写、实时翻译等都能极大的提升我的工作效率，拓展我的知识边界。使用好他们，对生产力有飞跃式的提升。</p><p>以上，如果你是银行人，不要选1月4日作为生日，通常这一天你都会很忙🙂。</p><p>生日快乐🎂</p>]]>
    </content>
    <id>https://proi.cc/2026/01/04/2026_brithday.html</id>
    <link href="https://proi.cc/2026/01/04/2026_brithday.html"/>
    <published>2026-01-04T03:23:13.000Z</published>
    <summary>
      <![CDATA[<p>挺快的，一年又过完了，又到了生日这一天。</p>
<p>生日和元旦临近有一个好处，刚写完对新一年的誓愿，又可以开始期许对自己新一岁的展望。特别是当我整理出原来的文章，发现每一篇之间以年为计量单位的间隔，至少“写作”这个愿望，一直没有持续的实现。在今天，也就是想到哪里写到哪里]]>
    </summary>
    <title>生日碎碎念</title>
    <updated>2026-01-04T03:23:13.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Chen Chen</name>
    </author>
    <category term="生活" scheme="https://proi.cc/categories/%E7%94%9F%E6%B4%BB/"/>
    <content>
      <![CDATA[<h2 id="新年的誓愿"><a href="#新年的誓愿" class="headerlink" title="新年的誓愿"></a>新年的誓愿</h2><blockquote><p><em>我想了想，还是把这一块放在前面。</em></p></blockquote><p>新年的誓愿，没有宏大的叙事和目标，没有长长的待办清单，只有继续要坚持的事情。</p><p><strong>“健康”</strong>：继续坚持运动习惯，每天的跑步，定期的远途骑行；继续坚持低脂低盐无糖的饮食习惯；努力达成更多的23点前睡觉的成就；继续关注自己和身边人的健康，正视健康问题并积极应对。</p><p><strong>“沉淀”</strong>：持续的学习和阅读，从坚持每月至少一本的阅读量开始；养成写作的习惯，从这一篇开始，每天留出30分钟的写作思考；多走出去看看，继续参加一些线下活动。</p><p><strong>“专注”</strong>：远离了消耗型人格，集中精力，在这一年中，更加专注地完成产品研发和团队的建设，相信彼此成就才是健康可持续的组织关系。</p><h2 id="旧年的回顾"><a href="#旧年的回顾" class="headerlink" title="旧年的回顾"></a>旧年的回顾</h2><p>回顾2025年，最适合我的三个关键词应该是“<u>活着</u>”、“<u>断舍离</u>”、“<u>人工智能</u>”。</p><p><strong>“活着”</strong>：不管好坏，大家又活过了一年。这一年，世界依旧是个草台班子，黑天鹅和灰犀牛漫天飞舞，有步履艰难，也有顺风稳健，但无论如何大家都走过了旧年，互道再见。“活着”的另一面，要感谢自己和朋友这一年坚持了每周运动，打球、骑行和跑步，更加关注了自己的健康。</p><p><strong>“断舍离”</strong>：临近年末，工作环境有所变动，Gemini告诉我：</p><blockquote><p>你的2025年，其实是一场“从虚伪的权力旋涡中抽身，回归技术与管理本质”的自我救赎。</p></blockquote><p>原部门的朋友们是支撑我这两年坚持下来的最大理由，难掩不舍。Gemini评价说：</p><blockquote><p>2025年你最大的收获，或许是看清了那种路径的“虚妄——虽然短期获利，但失去了技术人的脊梁和团队的真心”。</p></blockquote><p><strong>“人工智能”</strong>：这一年，人工智能的飞速发展，已经渗透到生活和工作的方方面面，我们正在面临着一场巨大的变革，用了元宝、chatgpt、豆包、千问、灵光、Gemini，在年末，被Gemini所惊艳，一个能胜任各种场景的个人助理。</p><p>⬆️以上，新年快乐！🎇</p><img src="https://proi.cc/images/hello2026.jpg" style="zoom:75%;" />]]>
    </content>
    <id>https://proi.cc/2026/01/01/Hello_2026.html</id>
    <link href="https://proi.cc/2026/01/01/Hello_2026.html"/>
    <published>2025-12-31T16:00:01.000Z</published>
    <summary>
      <![CDATA[<h2 id="新年的誓愿"><a href="#新年的誓愿" class="headerlink" title="新年的誓愿"></a>新年的誓愿</h2><blockquote>
<p><em>我想了想，还是把这一块放在前面。</em></p>
</blockquote>
<]]>
    </summary>
    <title>你好，2026！</title>
    <updated>2025-12-31T16:00:02.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Chen Chen</name>
    </author>
    <category term="开发" scheme="https://proi.cc/categories/%E5%BC%80%E5%8F%91/"/>
    <category term="JAVA" scheme="https://proi.cc/tags/JAVA/"/>
    <category term="SSL" scheme="https://proi.cc/tags/SSL/"/>
    <content>
      <![CDATA[<p>一句话版本：把jdk1.6升级到1.8。^_^</p><span id="more"></span><p>在一个项目中，内网应用通过squid代理访问对端互联网https协议地址时，报如下错误：</p><blockquote><p>javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure</p></blockquote><p>看着就是ssl握手失败，先从代理服务器开始，内网的服务器几百年没有升过级，考虑能升级的就是openssl，squid，curl这三个东西。<br>因为操作系统版本太旧，原来的openssl还是0.98的，curl是7.14版本。先把openssl升级到了1.0.2，古董操作系统能支持的最新版本，使用curl访问依旧报错。接着把curl升级到了7.19.7，访问成功。</p><p>但是在应用中访问依旧报上述的错误，开始考虑ca证书的问题，同样是DigiCert的微信接口访问没有问题，也都是多域名证书。接着是jdk版本，古老的1.6，就顺便去看了下jdk支持的ssl协议。</p><p>jdk1.6缺少了tlsv1.2的支持，同时1.6下的jce安全机制存在bug。<br>可以选择更新jce的jar包，或者升级jdk版本。</p><p>最后，跟开头一样，把jdk从1.6升级到了1.8，访问正常，并不需要升级openssl。</p>]]>
    </content>
    <id>https://proi.cc/2019/04/18/java_handshake_failure.html</id>
    <link href="https://proi.cc/2019/04/18/java_handshake_failure.html"/>
    <published>2019-04-18T05:12:17.000Z</published>
    <summary>
      <![CDATA[<p>一句话版本：把jdk1.6升级到1.8。^_^</p>]]>
    </summary>
    <title>java链接ssl alert received HANDSHAKE_FAILURE的一种解决方式</title>
    <updated>2019-04-18T05:12:17.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Chen Chen</name>
    </author>
    <category term="开发" scheme="https://proi.cc/categories/%E5%BC%80%E5%8F%91/"/>
    <category term="Paypal" scheme="https://proi.cc/tags/Paypal/"/>
    <content>
      <![CDATA[<blockquote><p>什么是即时付款通知IPN<br>当您收到新的付款交易或者已发生的付款交易的状态发生变化时，PayPal都将异步（即不作为网站付款流程的一部分） 发送付款详细数据到您所指定的URL，以便您了解买家付款的具体情况并做出相应的响应。这个过程我们称作即时付款通知（简称 IPN）。</p></blockquote><span id="more"></span><p>最近事情比较多，一直没有继续更新，不好意思了，今天难得有空，就把最重要的一段先发上来了。<br>相信大部分网站集成Paypal都希望能够实现客户支付完成后返回信息到自己的网站，然后处理这些信息。比如客户在你的网站上购买了一个产品，通过Paypal完成了支付，接着Paypal告诉你的网站客户完成了支付以及支付信息，最后你的网站将这些信息记录到你自己的数据库中，并且将你的客户订单状态设为已支付，接着你就可以进行一系列的相关订单的后续操作。<br>IPN就能帮助我们实现这个功能，IPN示意图如下（来自Paypal.com）：</p><p>当客户完成支付，Paypal会在后台通过post方式向你的服务器传送交易数据，来实现网站集成的功能。<br>接下来我们就来看IPN的实现方法。<br>第一步，你需要一个sandbox的帐号，这很重要，因为它能让你随心所欲的进行测试，而不用担心资金在天上飞。注册地址：<a href="https://developer.paypal.com/">https://developer.paypal.com</a><br>第二步，登陆sandbox，新建一个商家帐号（卖方）和一个客户账号（买方），其中卖方帐号必须是Premier或者Business，不然无法使用IPN功能。</p><p>新建买家帐号的时候记得在Account Balance中加上金额，不然你就没钱买东西了，如果paypal.com的帐号也能这样加钱多好。<br>新建完两个帐号：</p><p>卖家帐号的test mode要设为enabled。<br>选中business帐号，点击下面的Enter Sandbox Test Site进入sandbox Test Site，登录，就像普通Paypal帐号的管理页面一样。</p><p>点击Profile，在Selling Preferences中选择Instant Payment Notification Preferences，点击edit加入IPN信息返回的地址，记得勾上前面那个选项，我是用.net写的接受文件，所以我的IPN地址是<a href="http://www.chenchen.org/ipn.aspx">http://www.chenchen.org/ipn.aspx</a> ,地址只要能在互联网上访问到就可以了。</p><p>在Profile -&gt; Selling Preferences -&gt;Website Payment Preferences选项中，有一个Auto Return的选项，将它设为on，并且在下面的return地址中填入你希望的客户支付完成后返回的地址：<br>以上就完成了商家端的设置。</p><p>接下来是你网站上ipn.aspx文件的编写，这个是用来接收支付数据的，是非常关键的一个文件。<br>文件环境，.net 2.0，语言C#。<br>Ipn.aspx文件：此文件不用修改任何东西，代码都在cs文件中。<br>Ipn.aspx.cs文件：关键代码<br>定义一个VerifyIPN()函数：</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="built_in">bool</span> <span class="title">VerifyIPN</span>()</span></span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">string</span> strFormValues = Request.Form.ToString();</span><br><span class="line">        <span class="built_in">string</span> strNewValue;</span><br><span class="line">        <span class="built_in">string</span> strResponse;</span><br><span class="line">        <span class="built_in">string</span> serverURL = <span class="string">&quot;https://www.sandbox.paypal.com/cgi-bin/webscr&quot;</span>;</span><br><span class="line"></span><br><span class="line">        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(serverURL);</span><br><span class="line">        req.Method = <span class="string">&quot;POST&quot;</span>;</span><br><span class="line">        req.ContentType = <span class="string">&quot;application/x-www-form-urlencoded&quot;</span>;</span><br><span class="line">        strNewValue = strFormValues + <span class="string">&quot;&amp;cmd;=_notify-validate&quot;</span>;</span><br><span class="line">        req.ContentLength = strNewValue.Length;</span><br><span class="line"></span><br><span class="line">        StreamWriter stOut = <span class="keyword">new</span> StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);</span><br><span class="line">        stOut.Write(strNewValue);</span><br><span class="line">        stOut.Close();</span><br><span class="line"></span><br><span class="line">        StreamReader stIn = <span class="keyword">new</span> StreamReader(req.GetResponse().GetResponseStream());</span><br><span class="line">        strResponse = stIn.ReadToEnd();</span><br><span class="line">        stIn.Close();</span><br><span class="line"></span><br><span class="line">        <span class="keyword">return</span> strResponse == <span class="string">&quot;VERIFIED&quot;</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这段代码的作用是判断IPN信息是否来自Pyapal，如果不进行判断，那么恶意用户完全可以模拟一个信息post到你的网站上，让你认为订单已经完成支付，所以，必须首先对接受到的信息进行验证。<br>代码的基本原理，serverURL定义了验证地址，sandbox为：<a href="https://www.sandbox.paypal.com/cgi-bin/webscr%EF%BC%8CPaypal.com%E5%B0%B1%E6%98%AFhttps://www.paypal.com/cgi-bin/webscr%E3%80%82">https://www.sandbox.paypal.com/cgi-bin/webscr，Paypal.com就是https://www.paypal.com/cgi-bin/webscr。</a><br>将paypal发送过来的所有信息加上一个&cmd;&#x3D;_notify-validate参数，表示对这个信息进行验证，全部发送回paypal验证，如果信息确实存在，则返回VERIFIED字符串。<br>验证成功后，就可以用如下形式获得交易信息：</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="keyword">partial</span> <span class="keyword">class</span> <span class="title">paypal_ipn</span> : <span class="title">System.Web.UI.Page</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="function"><span class="keyword">protected</span> <span class="keyword">void</span> <span class="title">Page_Load</span>(<span class="params"><span class="built_in">object</span> sender, EventArgs e</span>)</span></span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span> (VerifyIPN())<span class="comment">//验证成功</span></span><br><span class="line">        &#123;</span><br><span class="line">            <span class="built_in">string</span> ppTx = Request.Form[<span class="string">&quot;txn_id&quot;</span>].ToString();<span class="comment">//获取post中的各项变量值</span></span><br><span class="line">                …</span><br><span class="line">            执行将数据写入数据库等操作</span><br><span class="line">        &#125;   </span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="built_in">bool</span> <span class="title">VerifyIPN</span>()</span></span><br><span class="line">&#123;</span><br><span class="line">        具体代码见上。</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这样，就实现了将支付信息传回网站的功能。注：当交易状态发生改变时，paypal也会返回一个ipn，比如完成支付，退款等等。</p><p>介绍一下sandbox中IPN测试工具，登陆sandbox主帐号，就是你在sandbox上注册的那个，不是那些卖家&#x2F;买家帐号。选择Test Tools -&gt; Instant Payment Notification (IPN) Simulator：输入你的ipn接受文件地址，选择ipn信息的方式，然后会让你填具体信息内容，再点击Send IPN，就能模拟一个ipn到你网站的页面，可以用来测试IPN是否正常工作。</p><p>不过这个工具有个小BUG，就是发送的IPN里不包括contact_phone这个变量，但是实际的IPN里是有的，这里要注意一下。<br>注：可以在商家帐号的Profile -&gt; Selling Preferences -&gt;Website Payment Preferences中，选择Contact Telephone Number这一栏，来确定是否需要发送买家联系电话。</p><blockquote><p>**此文来自时光旅行，内容已不维护:) **</p></blockquote>]]>
    </content>
    <id>https://proi.cc/2008/07/17/Paypal-integrated-3.html</id>
    <link href="https://proi.cc/2008/07/17/Paypal-integrated-3.html"/>
    <published>2008-07-17T12:10:00.000Z</published>
    <summary>
      <![CDATA[<blockquote>
<p>什么是即时付款通知IPN<br>当您收到新的付款交易或者已发生的付款交易的状态发生变化时，PayPal都将异步（即不作为网站付款流程的一部分） 发送付款详细数据到您所指定的URL，以便您了解买家付款的具体情况并做出相应的响应。这个过程我们称作即时付款通知（简称 IPN）。</p>
</blockquote>]]>
    </summary>
    <title>Paypal国际版网站集成简易教程（三）：IPN的使用</title>
    <updated>2008-07-17T12:10:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Chen Chen</name>
    </author>
    <category term="开发" scheme="https://proi.cc/categories/%E5%BC%80%E5%8F%91/"/>
    <category term="Paypal" scheme="https://proi.cc/tags/Paypal/"/>
    <content>
      <![CDATA[<p>本篇主要介绍如何在你的网站上快速加入paypal支付按钮，通过这个按钮，人们可以方便快速的付款到你的paypal帐户。</p><span id="more"></span><p>首先，你需要注册一个paypal帐户，帐户类型分为Personal（个人）、Premier（高级）和Business（商业），他们的差别对于开发者来说主要是返回的信息，Personal的不能使用IPN和PDT等商家工具，即不能获取交易信息，但是Personal帐户收款无需手续费；Premier和Business当然就提供了IPN和PDT功能，能够在客户支付成功后，将交易信息传给指定的网站，用来二次使用。Premier和Business使用上的差异我不是很清楚，应该是月收款额和手续费上的区别吧。</p><p>这里插进来介绍一下paypal sandbox，也就是沙盒，是paypal提供给开发者的一个工具，非常好用，你可以在<a href="https://developer.paypal.com/">https://developer.paypal.com/</a> 注册和使用它。登录以后可以新建帐户，设置余额和帐户类型，有一点要注意，每次使用时必须先登录sandbox才能使用新建的那些帐户。Sndbox里面有个测试工具，可以发送IPN的，以后会用到。</p><p>接着上面的内容，注册完帐户以后，当然，一开始开发最好使用sandbox，不然资金转来转去手续费都扣光了，paypal的费率如下：<br><a href="https://www.paypal.com/c2/webapps/mpp/paypal-seller-fees?locale.x=zh_C2">商家收费</a><br>比起国内的支付工具，paypal贵了好多，当然，和国情也有关系。<br>接下来是按钮的代码，很简单，就是一个普通的网页表单代码：</p><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">form</span> <span class="attr">action</span>=<span class="string">&quot;https://www.paypal.com/cgi-bin/webscr&quot;</span> <span class="attr">method</span>=<span class="string">&quot;post&quot;</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;hidden&quot;</span> <span class="attr">name</span>=<span class="string">&quot;cmd&quot;</span> <span class="attr">value</span>=<span class="string">&quot;_xclick&quot;</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;hidden&quot;</span> <span class="attr">name</span>=<span class="string">&quot;business&quot;</span> <span class="attr">value</span>=<span class="string">&quot;sample@sample.com&quot;</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;hidden&quot;</span> <span class="attr">name</span>=<span class="string">&quot;item_name&quot;</span> </span></span><br><span class="line"><span class="tag">   <span class="attr">value</span>=<span class="string">&quot;Item Name Goes Here&quot;</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;hidden&quot;</span> <span class="attr">name</span>=<span class="string">&quot;item_number&quot;</span> </span></span><br><span class="line"><span class="tag">   <span class="attr">value</span>=<span class="string">&quot;Item Number Goes Here&quot;</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;hidden&quot;</span> <span class="attr">name</span>=<span class="string">&quot;amount&quot;</span> <span class="attr">value</span>=<span class="string">&quot;100.00&quot;</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;hidden&quot;</span> <span class="attr">name</span>=<span class="string">&quot;no_shipping&quot;</span> <span class="attr">value</span>=<span class="string">&quot;2&quot;</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;hidden&quot;</span> <span class="attr">name</span>=<span class="string">&quot;no_note&quot;</span> <span class="attr">value</span>=<span class="string">&quot;1&quot;</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;hidden&quot;</span> <span class="attr">name</span>=<span class="string">&quot;currency_code&quot;</span> <span class="attr">value</span>=<span class="string">&quot;USD&quot;</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;hidden&quot;</span> <span class="attr">name</span>=<span class="string">&quot;bn&quot;</span> <span class="attr">value</span>=<span class="string">&quot;IC_Sample&quot;</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">input</span> <span class="attr">type</span>=<span class="string">&quot;image&quot;</span> <span class="attr">src</span>=<span class="string">&quot;https://www.paypal.com/</span></span></span><br><span class="line"><span class="string"><span class="tag">   en_US/i/btn/x-click-but23.gif&quot;</span> </span></span><br><span class="line"><span class="tag">   <span class="attr">name</span>=<span class="string">&quot;submit&quot;</span> <span class="attr">alt</span>=<span class="string">&quot;Make payments with payPal - it&#x27;s fast, </span></span></span><br><span class="line"><span class="string"><span class="tag">   free and secure!&quot;</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">img</span> <span class="attr">alt</span>=<span class="string">&quot;&quot;</span> </span></span><br><span class="line"><span class="tag">   <span class="attr">src</span>=<span class="string">&quot;https://www.paypal.com/en_US/i/scr/pixel.gif&quot;</span> </span></span><br><span class="line"><span class="tag">   <span class="attr">width</span>=<span class="string">&quot;1&quot;</span> <span class="attr">height</span>=<span class="string">&quot;1&quot;</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">form</span>&gt;</span></span><br></pre></td></tr></table></figure><p>如果使用sandbox，action地址改成<a href="https://www.sandbox.paypal.com/cgi-bin/webscr%E5%8D%B3%E5%8F%AF%EF%BC%8C%E4%B8%8A%E9%9D%A2%E8%BF%99%E6%AE%B5%E8%BF%98%E6%98%AF%E5%BE%88%E5%AE%B9%E6%98%93%E7%90%86%E8%A7%A3%E7%9A%84%EF%BC%8C%E7%9C%8B%E4%B8%8Bname%E5%92%8Cvalue%E5%9F%BA%E6%9C%AC%E4%B8%8A%E5%B0%B1%E8%83%BD%E7%9F%A5%E9%81%93%E6%AF%8F%E4%B8%AA%E5%80%BC%E7%9A%84%E5%90%AB%E4%B9%89%E4%BA%86%E3%80%82">https://www.sandbox.paypal.com/cgi-bin/webscr即可，上面这段还是很容易理解的，看下name和value基本上就能知道每个值的含义了。</a><br>保存用浏览器打开，就会看到一个paypal的按钮，点击过去按照提示操作，就能付款到business指定值的帐户了。<br>这就是一个最简单的paypal支付按钮。<br>再下一篇中会讲一下如何在付款成功之后，将信息返回到你的网站，大部分需求都是客户完成付款后返回信息到网站的数据库，记录网站客服的交易信息。<br>最后稍微了解下为什么海外用户喜欢用自己的网站做生意，而不是像国内一样用淘宝之类的C2C平台。一开始我也很不理解，有免费的平台为什么要自己建设网站还要支付paypal的手续费，后来和客户了解了一下，他们做的事网游虚拟交易，国外最大的C2C平台就是eBay，但只有德国可以售卖虚拟物品，并且eBay上的交易并不是免费的，收取的手续费远远高于paypal的费率，因此，更多的海外用户选择自己建设网站进行电子商务。</p><blockquote><p>**此文来自时光旅行，内容已不维护:) **</p></blockquote>]]>
    </content>
    <id>https://proi.cc/2008/07/10/Paypal-integrated-2.html</id>
    <link href="https://proi.cc/2008/07/10/Paypal-integrated-2.html"/>
    <published>2008-07-10T11:15:00.000Z</published>
    <summary>
      <![CDATA[<p>本篇主要介绍如何在你的网站上快速加入paypal支付按钮，通过这个按钮，人们可以方便快速的付款到你的paypal帐户。</p>]]>
    </summary>
    <title>Paypal国际版网站集成简易教程（二）：快速加入支付按钮</title>
    <updated>2008-07-10T11:15:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>Chen Chen</name>
    </author>
    <category term="开发" scheme="https://proi.cc/categories/%E5%BC%80%E5%8F%91/"/>
    <category term="Paypal" scheme="https://proi.cc/tags/Paypal/"/>
    <content>
      <![CDATA[<p>前段时间接到一个外贸网站的项目，集成paypal支付接口的，对象是海外用户，全部用US的信用卡结算。国内有个paypal的中文版，叫贝宝，不过只支持人民币之间的结算，而且提供的功能不多。所以只能使用paypal国际版，也就是paypal.com，习惯性的google了一下相关资料，发现关于paypal.com接口的中文文档并不多，也不详细，只好自己上paypal.com研究，还好paypal上的资料非常齐全，而且还提供了开发者沙盒（sandbox），相比之下，国内流行的支付宝还有很长的路要走啊。</p><span id="more"></span><p>项目结束的时候就有想法写一篇网站集成paypal的简易教程，方便以后的各位开发者，毕竟看长篇英文资料是很头痛的事情^_^。一直到昨天期末考才结束，所以今天开始写这个教程，其实内容也不多，可能还算不上教程，只能算经验吧。</p><p>主要分为序言、支付按钮、返回信息方式（IPN&PDT;）、实例四部分组成，预计在三天内完成，如果有新内容我临时再加吧。<br>接下来一篇将会介绍如何在网站上快速加入paypal支付按钮。</p><blockquote><p>**此文来自时光旅行，内容已不维护:) **</p></blockquote>]]>
    </content>
    <id>https://proi.cc/2008/07/09/Paypal-integrated-1.html</id>
    <link href="https://proi.cc/2008/07/09/Paypal-integrated-1.html"/>
    <published>2008-07-09T12:10:00.000Z</published>
    <summary>
      <![CDATA[<p>前段时间接到一个外贸网站的项目，集成paypal支付接口的，对象是海外用户，全部用US的信用卡结算。国内有个paypal的中文版，叫贝宝，不过只支持人民币之间的结算，而且提供的功能不多。所以只能使用paypal国际版，也就是paypal.com，习惯性的google了一下相关资料，发现关于paypal.com接口的中文文档并不多，也不详细，只好自己上paypal.com研究，还好paypal上的资料非常齐全，而且还提供了开发者沙盒（sandbox），相比之下，国内流行的支付宝还有很长的路要走啊。</p>]]>
    </summary>
    <title>Paypal国际版网站集成简易教程（一）：序言</title>
    <updated>2008-07-09T12:10:00.000Z</updated>
  </entry>
</feed>
